2008-10-10 21 views
5

que estaba buscando en el registro de Rubí método de biblioteca Logging.logger y tienen una pregunta del source at github relacionada con este trozo de código:Rubí Meta Programación Pregunta

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 

entiendo que la clase < < registrador se abre la clase eigen/meta/singleton al objeto logger para agregar un método de cierre de especifice de instancia. Sin embargo, no estoy exactamente seguro de lo que hace la "clase < < self; undef: close; end" y con qué propósito. ¿Alguien puede decirme qué significa?

Respuesta

10

esto en realidad elimina el método (cuando en realidad es ejecutado). Es una medida de seguridad para asegurarse de que no se llame al cierre dos veces. Parece que hay construcciones 'clase < <' anidadas, pero no las hay. La clase interna < < se ejecuta cuando se llama al método y la clase externa < < se llama cuando se define el método.

Cuestiones relacionadas