5

我正在查看 Ruby 日志记录库 Logging.logger 方法,并且在 github 的源代码中有一个与这段代码相关的问题:

  logger = ::Logging::Logger.new(name)
  logger.add_appenders appender
  logger.additive = false

  class << logger
    def close
      @appenders.each {|a| a.close}
      h = ::Logging::Repository.instance.instance_variable_get :@h
      h.delete(@name)
      class << self; undef :close; end
    end
  end

我知道类 << logger 向 logger 对象打开了 eigen/meta/singleton 类以添加实例特定的关闭方法。但是,我不确定“class << self; undef :close; end” 的作用和目的。谁能告诉我这是什么意思?

4

1 回答 1

11

这实际上删除了方法(当它实际执行时)。这是确保 close 不会被调用两次的保障措施。看起来有嵌套的 'class << ' 构造,但没有。调用方法时执行内部类<<,定义方法时调用外部类<<。

于 2008-10-10T14:39:31.313 回答