从类名动态创建实例

JCL*_*CLL 1 ruby metaprogramming

我有一个Ruby程序,它生成包含Module定义的文件:

 # try.rb
 module Test
  class F1
   def initialize arg
     @arg=arg
   end
  end
 end
Run Code Online (Sandbox Code Playgroud)

现在,我想用相同的程序来创建F1的实例.

这样做的成语是什么?

The*_*heo 7

loadrequire文件:

load 'path/to/try.rb'
Run Code Online (Sandbox Code Playgroud)

然后你可以Object.const_get用来获取类对象的引用,并使用它来创建一个实例:

cls = Object.const_get('Test').const_get('F1')
obj = cls.new('foo')
Run Code Online (Sandbox Code Playgroud)

  • 你也可以将它缩短为`Object.const_get('Test :: F1')` (2认同)