Ruby :: call_user_func_array()的模拟

时间:2012-04-15 17:34:36

标签: ruby

Ruby中有call_user_func_array()模拟吗?如何从包含类名的字符串创建类。我发现只有“eval”...

2 个答案:

答案 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