Класс из строки - PullRequest
       28

Класс из строки

2 голосов
/ 11 мая 2010

Допустим, у меня есть класс с именем Klass и класс с именем Klass2 . В зависимости от ввода пользователя я бы хотел решить, буду ли я звонить "hello_world" на Klass или Klass2:

class Klass
  def self.hello_world
    "Hello World from Klass1!"
  end
end

class Klass2
  def self.hello_world
    "Hello World from Klass2!"
  end
end

input = gets.strip
class_to_use = input
puts class_to_use.send :hello_world

Пользователь вводит "Klass2" и скрипт должен сказать:

Hello World от Klass2!

Очевидно, что этот код не работает, так как я звоню #hello_world на String, но я бы хотел позвонить #hello_world на Klass2.

Как мне "преобразовать" строку в ссылку на Klass2 (или что-либо еще, что пользователь может ввести), или как мне еще добиться такого поведения?

Ответы [ 3 ]

11 голосов
/ 11 мая 2010
puts Object.const_get(class_to_use).hello_world
1 голос
/ 11 мая 2010

Если у вас загружен ActiveSupport (например, в приложении Rails), вы также можете использовать #constantize:

class_to_use.constantize.hello_world
1 голос
/ 11 мая 2010
puts eval(class_to_use).hello_world
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...