包含一个带有或不带有发送功能的模块,有什么区别吗?

问题描述

|
SomeClass.include(SomeModule)
SomeClass.send :include,SomeModule
它们之间有什么区别吗?为什么选择第二种方式? (至少我在其他人的代码中更经常地找到它)。     

解决方法

它们几乎是相同的。 不同之处在于如果
SomeClass#include
是私有的,则由于
Object#send
的性质,后者仍然可以调用它 如果
SomeClass#include
是私人的,而您选择了前者,它将产生一个错误。 因此,使用后者的优点是无论可见性如何,都可以包含一个模块。 (无论您是否真的认为访问私有方法是“正确的”事情,这是另外一回事了。它肯定会给您带来巨大的力量)。     ,您可以重新打开现有的课程:
class SomeClass
  include SomeModule
end