包含或不包含发送的模块,有什么区别吗?

时间:2011-04-12 19:30:08

标签: ruby metaprogramming

SomeClass.include(SomeModule)

VS

SomeClass.send :include, SomeModule

他们之间有什么不同吗?为什么第二种方式更受青睐? (至少我在其他人的代码中更频繁地发现它。)

2 个答案:

答案 0 :(得分:5)

他们差不多相同。

不同之处在于,如果SomeClass#include是私有的,由于Object#send

的性质,后者仍然可以调用它

如果SomeClass#include是私有的,而你选择前者,则会引发错误。

因此,使用后者的优势在于,无论可见性如何,您都可以包含模块。 (你是否真的相信访问私有方法是“正确”的事情是另一个故事。它肯定会给你巨大的力量。)

答案 1 :(得分:0)

您可以重新打开现有课程:

class SomeClass
  include SomeModule
end