Ruby中有call_user_func_array()模拟吗?如何从包含类名的字符串创建类。我发现只有“eval”...
答案 0 :(得分:1)
如果要调用动态方法名称,请使用send
:
user.send("method_#{i}")
如果i = 1
将调用method_1
对象上的user
,则会这样做。
Ruby
使用术语“对象将消息发送到另一个对象”而不是“调用方法/函数”。
答案 1 :(得分:0)
使用Array 提供的参数调用 str 给出的函数a:
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