问题描述
|
SomeClass.include(SomeModule)
与
SomeClass.send :include,SomeModule
它们之间有什么区别吗?为什么选择第二种方式? (至少我在其他人的代码中更经常地找到它)。
解决方法
它们几乎是相同的。
不同之处在于如果
SomeClass#include
是私有的,则由于Object#send
的性质,后者仍然可以调用它
如果SomeClass#include
是私人的,而您选择了前者,它将产生一个错误。
因此,使用后者的优点是无论可见性如何,都可以包含一个模块。 (无论您是否真的认为访问私有方法是“正确的”事情,这是另外一回事了。它肯定会给您带来巨大的力量)。
,您可以重新打开现有的课程:
class SomeClass
include SomeModule
end