5

我需要做这样的事情

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

classname = 'Foo'

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

有没有可能。如果是怎么样?

非常感谢!

4

3 回答 3

7

你可以使用const_get

instance = Object.const_get(classname).new
instance.perform
于 2012-05-12T23:27:29.873 回答
3

是的,有可能——

class Foo
  def perform
    puts 'hello'
  end
end

f = 'Foo'

klass = Object.const_get f

f.new.perform
于 2012-05-12T23:27:17.763 回答
3

您可以使用Module#const_get

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

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

于 2012-05-12T23:29:26.327 回答