我正在學習如何在我的Ruby代碼使用Module.prepend
代替alias_method_chain
,我已經注意到,有些人使用send
稱呼它(example):爲什麼人們使用`Module.send(:prepend,...)`?
ActionView::TemplateRenderer.send(:prepend,
ActionViewTemplateRendererWithCurrentTemplate)
當別人直接調用它(example) :
ActionView::TemplateRenderer.prepend(ActionViewTemplateRendererWithCurrentTemplate)
而且,雖然我還沒有看到任何人使用這種風格,我從文檔懷疑,你甚至可以你從前面加上模塊中這樣寫:
module ActionViewTemplateRendererWithCurrentTemplate
# Methods you're overriding go here
prepend_features ActionView::TemplateRenderer
end
這三種風格之間有一些區別嗎?是否有理由支持他人?
也許人們仍然會這樣寫,因爲'老習慣',因爲#include和#prepend在Ruby 2.1之前曾經是私有方法。 – Matheno
'prepend_features'是一個被'prepend'調用的鉤子方法,通常是* not *意圖也不是被設計爲直接調用。 –