Я хочу изменить регистрирующийся уровень приложения (рубин).
require 'logger'
config = { :level => 'Logger::WARN' }
log = Logger.new STDOUT
log.level = Kernel.const_get config[:level]
Ну, irb не был доволен этим и бросил "NameError: неправильно постоянное имя Регистратор:: ПРЕДУПРЕДИТЕ" в моей поверхности. Тьфу! Я был оскорблен.
Я мог сделать это в случае/когда, чтобы решить это или сделать log.level = 1, но должен быть более изящный путь!
У кого-либо есть какие-либо идеи?
- daniel
Почему бы вам просто не использовать буквальную константу в своем хеш-коде config
?
config = { :level => Logger::WARN }
Тогда вам не нужно вводить в заблуждение вокруг const_get
или что-то в этом роде; вы можете просто ввести log.level = config [: level]
.
Если это абсолютно должно быть строкой, вы можете отбросить префикс пространства имен и вызвать const_get
в модуле Logger
:
irb(main):012:0> Logger.const_get 'WARN'
=> 2
Если это ] действительно должно быть квалифицированной строкой, вы можете попробовать использовать метод qual_const_get
этого блога (который не является встроенным!).