Rails 4.2.0/Ruby 2.2.1
Я сталкиваюсь с непоследовательным поведением при использовании defined?
, чтобы проверить, существует ли класс с заданным именем или нет. Я хочу избежать спасения исключений, используя метод предиката. Но, как видно ниже, он возвращает противоречивые результаты. Такое поведение приводит к сбою некоторого кода, написанного в контроллере.
$ rails c
Loading development environment (Rails 4.2.0)
2.2.1 :001 > defined?(User)
=> "constant"
2.2.1 :002 > defined?(AuthenticationToken)
=> nil
2.2.1 :003 > AuthenticationToken
=> AuthenticationToken (call 'AuthenticationToken.connection' to establish a connection)
2.2.1 :004 > defined?(AuthenticationToken)
=> "constant"
Я также пытался использовать Kernel.const_defined?
, но обнаружил такое же непоследовательное поведение.
$ rails c
Loading development environment (Rails 4.2.0)
2.2.1 :001 > Kernel.const_defined?('Role')
=> false
2.2.1 :002 > Kernel.const_defined?('AuthenticationToken')
=> false
2.2.1 :003 > AuthenticationToken
=> AuthenticationToken (call 'AuthenticationToken.connection' to establish a connection)
2.2.1 :004 > Kernel.const_defined?('AuthenticationToken')
=> true
Есть ли какой-нибудь стандартный способ заставить этот код вести себя последовательно?
Спасибо.