假设我有一个Flight
使用类和实例方法调用的模块。我可以使用 , 或两者将其方法放入一个类include
中extend
:
class Bat < Mammal
# Add Flight's class methods to Bat.
extend Flight
# Add Flight's instance methods to Bat.
include Flight
...
end
include
将添加Flight
到Bat.ancestors
,但extend
不会。
我的问题是,为什么模块与类不同?当我子类化时Mammal
,我总是同时获得类和实例方法。但是,当我混入一个模块时,我不能同时获得类和实例方法(除非我使用self.included
钩子或类似ActiveSupport::Concern的东西)。
这种差异背后是否存在语言设计问题?