ott*_*bar 5 ruby metaprogramming
我正在查看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
Run Code Online (Sandbox Code Playgroud)
据我所知,类<< logger打开了loginger对象的eigen/meta/singleton类来添加一个实例特定的close方法.但是,我并不完全确定"类<< self; undef:close; end"的用途和用途.谁能告诉我它意味着什么?
Dav*_*hme 11
这实际上删除了该方法(当它实际执行时).确保关闭不被调用两次是一种安全措施.它看起来有嵌套的'class <<'结构,但没有.调用方法时执行内部类<< <<,当定义方法时调用外部类<<.