2011-01-25 33 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

Lifesaver。谢谢! – GeorgieF 2011-01-25 23:37:04