0

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

4

2 回答 2

1

如果要调用动态方法名称,请使用send

user.send("method_#{i}")

这,如果i = 1将调用method_1onuser对象。

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