2014-09-12 3 views
2

Если у меня есть класс под названием «Пользователь класса», можно ли вызвать класс через String?Динамический вызов класса Ruby?

например.

user = User.new (обычный способ)

, но я хотел бы, чтобы действовать таким образом

mystring = "User" 
user = mystring.new 

ответ

5

Используйте метод const_get

my_string = "User" 
user = Object.const_get(my_string).new 
+0

работает как волшебство! – kidcapital

+0

Рад помочь. =) – lcguida

-1

Вы можете использовать eval выполнить произвольный dynamically- сгенерированный код:

mystring = "User" 
user = eval("new " + mystring) 

Ответы выше (по крайней мере) более безопасны, во всяком случае.

+1

Просьба дать объяснение, как работает метод eval, так что он более понятен для тех, кто раньше не встречал этот метод. – Bobulous

1

Я считаю, что вы можете найти ответ здесь: ruby convert class name in string to actual class

выше, кажется, ограничивается методом в Ruby On Rails, если вы не используете Rails вы можете посмотреть здесь: http://blog.andrewvc.com/quickly-constantize

Строка кода, в которой работает вторая ссылка, просто замените строку в начале вашей строки, а затем, если вы вызываете new в результате, вы можете инициализировать объект, вызвав mystring.new (он, похоже, не работает для «нового мистификатора»).

Смежные вопросы