最近我偶然发现了这篇非常有趣的帖子:http ://opensoul.org/blog/archives/2011/02/07/concerning-activesupportconcern/ ,其中介绍了(并解释了)ActiveSupport::Concern
源代码。
出现了一些问题,但最重要的是:
显然,有一个方法被称为append_features
(至少在文档中)说:“Ruby 的这个方法的默认实现会将这个模块的常量、方法和变量添加到基本模块中”。
我一直认为模块在方法查找链的意义上与类的工作方式相同 - 唯一的区别是你不能从中实例化对象,并且它没有被定义为这个类的“超类”(因为一个模块实际上不是一个类)。这意味着当一个类includes
成为模块时,该模块只是作为直接父级添加到类的继承层次结构中,因此,将在模块中查找包含类中缺少的方法。
但如果是这种情况,那么append_features
实际上“将方法添加到基本模块”是什么意思,这意味着您实际上可以通过覆盖此方法(ActiveSupport::Concern
实际上确实如此)来防止这种行为。
有人可以在我的脑海中创建一些订单吗?