2012-12-11 38 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