今天我正在玩include
和extend
并发现了一些我不太了解的内容。
module Dragon
def roar
'roar'
end
end
module Knight
include Dragon
def fight
'fight'
end
end
class Other
extend Knight
end
puts Other.roar # -> 'roar'
为什么roar
上的Other
作为类方法可用?我做了extend Knight
,这使得Knight's
方法可用作类方法。 Knight
反过来include Dragon
,但这应该使Dragon
方法可用作instance
方法。但这不是这里唯一奇怪的事情,你也无法创建模块实例,为什么我可以在模块上include
?
答案 0 :(得分:1)
1)您将Dragon模块中的方法包含在Knigth模块中(如mixin)。
2)当你扩展类时,Knight的所有方法(Dragon方法都已包含在内)成为类Other的类方法。这是正常的行为,看不出问题。
另一个问题是你想要达到什么目的?
答案 1 :(得分:1)
Include使咆哮或战斗方法可用于类的实例并且扩展使咆哮或战斗方法可用于类本身。