2012-12-11 113 views
1

我想定义记录器在模块上的方法,并将它们委托给返回记录器的方法。动态添加单例方法

module MyLogger 
    def self.logger 
    # return a Logger, whatever 
    end 

    [:debug, :info, :warn, :error, :fatal] do |_method| 
    def self._method *args # WRONG. Want to define something named `_method` for the class 
     logger.send _method, *args 
    end 
    end 
end 

我该如何解决WRONG系列的问题?

回答

7
module MyLogger 
    def self.logger *args 
    # return a Logger, whatever 
    end 

    [:debug, :info, :warn, :error, :fatal].each do |_method| 
    define_singleton_method _method do |*args| 
     logger.send _method, *args 
    end 
    end 

end 

p MyLogger.singleton_methods 
# => [:logger, :debug, :info, :warn, :error, :fatal] 
+0

谢谢,希望这会帮助我的鞋子下一个可怜的灵魂! – cbmanica