2008-10-10 72 views
5

我一直在寻找在Ruby日志库Logging.logger方法,并有从source at github有关这段代码的一个问题:Ruby的元编程问题

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 

我了解该类< <记录器打开将特征/ meta/singleton类添加到记录器对象以添加实例特定的close方法。然而,我并不确定“自我; undef:close; end”的类别是什么,并且是为了什么目的。谁能告诉我这是什么意思?

回答

10

这实际上会删除该方法(当它实际执行时)。这是确保关闭不会被调用两次的保障。它看起来像嵌套'类< <'结构,但没有。在调用方法时执行内部类< <,并且在定义该方法时调用外部类< <。