2011-01-17 7 views
1

クラスDに、インスタンスメソッドとクラスメソッドで構成される一般的な機能をいくつか追加したいと思います。私はこれを以下のようにしようとしましたが、うまくいかなかった。これを達成する正しい方法は何ですか?Rubyでインスタンスメソッドとクラスメソッドをラップするには?

module A 
    def foo 
    puts "foo!" 
    end 
end 

module B 
    def wow 
    puts "wow!" 
    end 
end 

module C 
    include A # instance methods 
    extend B # class methods 
end 

class D 
    include C 
end 

D.new.foo 
D.wow 

答えて

6

あなたがやりたいことができるように、次のようにCを定義する必要があります:

module C 
    include A 

    def self.included(base) 
    base.extend B #"base" here is "D" 
    end 

end 
+0

感謝を!ここで「自己」の意味は何ですか?私はそれを省略するとどうなりますか? –

+0

自己は "モジュールメソッド"を "クラスメソッド"に似ています。それを削除しても機能しません。 –

+0

@Mishaこれを省略すると、破損します。 'def self.xxx'は、インスタンスによって継承されるメソッドではなく、クラス/モジュール自体のメソッドを定義します。 – Phrogz

関連する問題