Я смотрел метод Logging.logger библиотеки журналов Ruby и получил вопрос от источник на 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
Я понимаю, что class << logger открывает класс eigen / meta / singleton для объекта logger, чтобы добавить метод закрытия экземпляра. Однако я не совсем уверен, что делает «class << self; undef: close; end» и с какой целью. Кто-нибудь может сказать мне, что это значит?

это фактически удаляет метод (когда он действительно запускается). Это гарантия того, что закрытие не будет объявлено дважды. Похоже, что есть вложенные конструкции 'class <<', но их нет. Внутренний класс << выполняется при вызове метода, а внешний класс << вызывается при определении метода.