Как мне превратить строку в имя класса, но только если этот класс уже существует?
Если Amber уже класс, я могу перейти из строки в класс через:
Object.const_get("Amber")
или (в Rails)
"Amber".constantize
Но любой из них будет сбой с NameError: неинициализированная константа Amber
, если Amber еще не является классом.
Моя первая мысль - использовать метод defined?
, но он не различает классы, которые уже существуют, а те, которые не существуют:
>> defined?("Object".constantize)
=> "method"
>> defined?("AClassNameThatCouldNotPossiblyExist".constantize)
=> "method"
Итак, как мне проверить, называет ли строка класс строку, прежде чем я попытаюсь его преобразовать? (Хорошо, как насчет блока begin
/ rescue
для обнаружения ошибок NameError? Слишком уродливо? Согласен ...)