Как проверить, определен ли класс?

Как мне превратить строку в имя класса, но только если этот класс уже существует?

Если Amber уже класс, я могу перейти из строки в класс через:

Object.const_get("Amber")

или (в Rails)

"Amber".constantize

Но любой из них будет сбой с NameError: неинициализированная константа Amber , если Amber еще не является классом.

Моя первая мысль - использовать метод defined? , но он не различает классы, которые уже существуют, а те, которые не существуют:

>> defined?("Object".constantize)
=> "method"
>> defined?("AClassNameThatCouldNotPossiblyExist".constantize)
=> "method"

Итак, как мне проверить, называет ли строка класс строку, прежде чем я попытаюсь его преобразовать? (Хорошо, как насчет блока begin / rescue для обнаружения ошибок NameError? Слишком уродливо? Согласен ...)

69
задан the Tin Man 2 August 2015 в 16:24
поделиться