包含和扩展模块的行为

时间:2012-06-29 17:21:54

标签: ruby-on-rails ruby ruby-on-rails-3

今天我正在玩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

2 个答案:

答案 0 :(得分:1)

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

2)当你扩展类时,Knight的所有方法(Dragon方法都已包含在内)成为类Other的类方法。这是正常的行为,看不出问题。

另一个问题是你想要达到什么目的?

答案 1 :(得分:1)

Include使咆哮或战斗方法可用于类的实例并且扩展使咆哮或战斗方法可用于类本身。

相关问题