2008-10-10 71 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

這實際上會刪除該方法(當它實際執行時)。這是確保關閉不會被調用兩次的保障。它看起來像嵌套'類< <'結構,但沒有。在調用方法時執行內部類< <,並且在定義該方法時調用外部類< <。