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'sKnightinclude DragonDragoninstanceinclude

4

2 に答える 2

1

1) Dragon モジュールのメソッドを Knigth モジュール (mixin など) に含めます。

2) クラスを拡張すると、Knight のすべてのメソッド (Dragon メソッドは既に含まれています) はクラス Other のクラス メソッドになります。これは正常な動作であり、問​​題はありません。

別の質問 あなたは何を達成したいですか?

于 2012-06-29T17:50:15.677 に答える
1

インクルードは、roar またはfight メソッドをクラスのインスタンスで利用できるようにし、extend は、roar またはfight メソッドをクラス自体で利用できるようにします。

于 2012-06-30T05:12:07.717 に答える