1

我想定义 Logger 在模块上的方法,并将它们委托给返回 Logger 的方法。

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

如何修复错误的行以使其正常工作?

4

1 回答 1

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]
于 2012-12-11T19:39:11.303 回答