只是让我了解Ruby元编程。 mixin/模块总是设法使我感到困惑。
那么主要的区别就是这样吗?还是更大的潜伏者呢?
例如
module ReusableModule
def module_method
puts "Module Method: Hi there!"
end
end
class ClassThatIncludes
include ReusableModule
end
class ClassThatExtends
extend ReusableModule
end
puts "Include"
ClassThatIncludes.new.module_method # "Module Method: Hi there!"
puts "Extend"
ClassThatExtends.module_method # "Module Method: Hi there!"
最佳答案
你说的是对的。但是,还有更多的东西。
如果您有一个Klazz
类和Mod
模块,则在Mod
中包含Klazz
可使Klazz
实例访问Mod
的方法。或者,您可以使用Klazz
扩展Mod
,从而使Klazz
类可以访问Mod
的方法。但是您也可以使用o.extend Mod
扩展任意对象。在这种情况下,即使所有其他对象与Mod
具有相同的类,单个对象也将获得o
的方法。