在变量Ruby中使用类名创建的类实例

时间:2012-05-12 23:23:43

标签: ruby

我需要做那样的事情

class Foo
 define perform()
  puts 'hello'
 end
end

classname = 'Foo'

instance = create_instance(classname)
instance.perform();

这样的事情是可能的。如果是如何?

非常感谢!

3 个答案:

答案 0 :(得分:5)

您可以使用const_get

instance = Object.const_get(classname).new
instance.perform

答案 1 :(得分:2)

是的,有可能 -

class Foo
  def perform
    puts 'hello'
  end
end

f = 'Foo'

klass = Object.const_get f

f.new.perform

答案 2 :(得分:2)

您可以使用Module#const_get

klass = Object.const_get(classname)
instance = klass.new

但是如果它来自用户输入,您可能希望首先将类名列入白名单。否则你可能会打开一个安全漏洞。