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