Во-первых, я хочу отметить кое-что из ответов выше.rescue false
означает, что все виды исключений, выданных из этого выражения, спасены как ложные.Это означает, что даже если у вас есть объект исключения класса NoMethodError
или RuntimeError
, вы вернете false
, и вы ожидаете, что постоянная строка не будет соответствовать константе в вашем приложении.Это может привести к часам отладки, если вы не знаете, как работает система обработки ошибок в ruby.Это также место для внесения множества ошибок в ваш код в будущем.
Я вижу тег ruby-on-rails , поэтому я предполагаю, что вы столкнулись с проблемой в railsприложение.Вы можете использовать вспомогательный метод из модуля ActiveSupport::Inflector
.Вместо того, чтобы спасать метод constantize
, вы, вероятно, захотите использовать safe_constantize
.Он вернет nil
, если константа отсутствует в вашем проекте.
Пример использования (обратите внимание, я не определил Foo
константу в моем проекте):
# with constantize
irb(main) > 'foo'.constantize
=> NameError (wrong constant name foo)
# with safe_contantize
irb(main) > 'foo'.safe_constantize
=> nil