如何在Ruby中的string名称创build一个类实例?

我有一个类的名称,我想创build该类的一个实例,以便我可以遍历该类的架构中存在的每个rails属性。

我将如何去做呢?

  1. 我有我想要检查的类的string的名称
  2. 我想我需要实例化一个类实例,以便我可以
  3. 循环访问属性并打印它们。

在rails中,你可以这样做:

 clazz = 'ExampleClass'.constantize 

在纯ruby中:

 clazz = Object.const_get('ExampleClass') 

带模块:

 module Foo class Bar end end 

你会用

 > clazz = 'Foo::Bar'.split('::').inject(Object) {|o,c| o.const_get c} => Foo::Bar > clazz.new => #<Foo::Bar:0x0000010110a4f8> 

在Rails中很简单:使用String#constantize

 class_name = "MyClass" instance = class_name.constantize.new 

尝试这个:

 Kernel.const_get("MyClass").new 

然后循环一个对象的实例variables:

 obj.instance_variables.each do |v| # do something end 
 module One module Two class Three def say_hi puts "say hi" end end end end one = Object.const_get "One" puts one.class # => Module three = One::Two.const_get "Three" puts three.class # => Class three.new.say_hi # => "say hi" 

在ruby 2.0以及可能更早的版本中, Object.const_get将recursion地执行对Foo::Bar等命名空间的查找 。 上面的例子是当命名空间提前知道的时候,强调const_get可以直接在模块上调用,而不是专门在Object上调用。