Ruby中的反思.通过给定的类名实例化对象

voo*_*ooD 20 ruby reflection

我从PHP来到ruby.我怎么能在红宝石中做下一件事?

$className = 'ArrayObject';
$arrayObject = new $className();
Run Code Online (Sandbox Code Playgroud)

Joh*_*ley 29

你可以这样做:

arrayObject = Object::const_get('Array').new
Run Code Online (Sandbox Code Playgroud)


Ran*_*mon 17

如果您使用Ruby on Rails,还可以使用以下内容:

array_object = "Array".constantize.new
Run Code Online (Sandbox Code Playgroud)

  • 值得指出的是,`constantize`是Rails的ActiveSupport模块添加到Ruby的核心扩展,即它不是纯Ruby. (3认同)

Geo*_*Geo 5

如果您有一个类,例如String:

a = String
a.new("Geo")
Run Code Online (Sandbox Code Playgroud)

会给你一个字符串。同样的事情也适用于其他类(参数的数量和类型当然会有所不同)。