Pab*_* B. 4 ruby metaprogramming
SomeClass.include(SomeModule)
Run Code Online (Sandbox Code Playgroud)
与
SomeClass.send :include, SomeModule
Run Code Online (Sandbox Code Playgroud)
它们之间有什么不同吗?为什么第二种方式更受青睐?(至少我在其他人的代码中发现它更频繁).
它们几乎相同.
不同之处在于,如果SomeClass#include是私有的,后者仍然可以根据其性质来调用它Object#send
如果SomeClass#include是私人的,你去了前者,它会引起错误.
因此,使用后者的优点是,无论可见性如何,您都可以包含模块.(你是否真的相信访问私有方法是"正确"的事情是另一个故事.它肯定会给你巨大的力量).