2011-01-25 7 views
17

私は現時点でいくつかの魔法をしたいと思いますし、クラスメソッドがクラスに追加されています。したがって、私は以下を試しました:クラスメソッドのmethod_addedを理解する

module Magic 
    def self.included(base) 
    base.extend ClassMethods 
    end 
    module ClassMethods 
    def method_added(name) 
     puts "class method '#{name}' added" 
    end 
    def some_class_method 
     puts "some class method" 
    end 
    end 
end 

class Foo 
    include Magic 
    def self.method_added(name) 
    puts "instance method #{name} added" 
    end 
end 

この方法は、インスタンスメソッドではうまくいき、クラスメソッドでは失敗します。それをどうすれば解決できますか?助言がありますか?

答えて

24

あなたはsingleton_method_addedを探しています:

module Magic 
    def self.included(base) 
    base.extend ClassMethods 
    end 
    module ClassMethods 
    def method_added(name) 
     puts "instance method '#{name}' added" 
    end 

    def singleton_method_added(name) 
     puts "class method '#{name}' added" 
    end 
    end 
end 

class Foo 
    include Magic 

    def bla 
    end 

    def blubb 
    end 

    def self.foobar 
    end 
end 

出力:

instance method 'bla' added 
instance method 'blubb' added 
class method 'foobar' added 

お楽しみください!

+1

ライフセーバー。ありがとうございました! – GeorgieF