0

我正在玩includeextend今天发现了一些我不太明白的东西。

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在一个模块上呢?

4

2 回答 2

1

1)您将 Dragon 模块中的方法包含到 Knigth 模块中(如 mixin)。

2)当你扩展类时,来自Knight的所有方法(已经包含了Dragon方法)成为类Other的类方法。这是正常现象,看不出有什么问题。

另一个问题你想达到什么目标?

于 2012-06-29T17:50:15.677 回答
1

Include 使 roar 或 Fight 方法可用于类的实例,而 extend 使 roar 或 Fight 方法可用于类本身。

于 2012-06-30T05:12:07.717 回答