Ruby元编程问题

时间:2008-10-10 14:25:13

标签: ruby metaprogramming

我正在查看Ruby日志记录库Logging.logger方法,并从source at 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

我理解班级&lt;&lt; logger向logger对象打开eigen / meta / singleton类,以添加实例特定的close方法。但是,我并不完全确定“class&lt;&lt; self; undef:close; end”是什么以及出于什么目的。谁能告诉我这是什么意思?

1 个答案:

答案 0 :(得分:11)

这实际上删除了该方法(当它实际执行时)。确保关闭不被调用两次是一种安全措施。它看起来有嵌套的'class&lt;&lt; '构造,但没有。内部类&lt;&lt;在调用方法并且外部类&lt;&lt;在定义方法时调用。