Ruby 中有 call_user_func_array() 模拟吗?以及如何从包含类名的字符串创建类。我发现只有“eval”...
问问题
108 次
2 回答
1
如果要调用动态方法名称,请使用send
:
user.send("method_#{i}")
这,如果i = 1
将调用method_1
onuser
对象。
Ruby
使用术语“一个对象向另一个对象发送消息”而不是“调用方法/函数”。
于 2012-04-15T18:14:06.820 回答
0
使用 Array a 提供的参数调用str给出的函数:
obj.send str, *a
你怀疑eval是正确的。Ruby 中几乎总是有更好的方法。要使用字符串检索类对象,请使用:
Kernel.const_get str
因此,例如:
> class A; end
> Kernel.const_get('A').class
=> Class
> Kernel.const_get('A').new
=> #<A:0x100360ac8>
我应该补充一点,在 Ruby 中通常不需要基于包含其常量名称的字符串来查找类。在 Ruby 中,类是真实的对象,因此可以直接将它们存储在集合中,将它们分配给常量和变量等,最后调用类方法例如#new
:
(some expression).new
于 2012-04-15T20:27:32.103 回答