Ruby String to方法名称错误:未定义方法`call ='for#<method:0xa396aac>(NoMethodError)</method:0xa396aac>

时间:2012-02-27 08:46:02

标签: ruby sequel

我必须动态调用对象obj上的方法列表。 我试图实例化一个方法对象,然后调用它。

method_name(字符串)是可以在对象obj上调用的方法的名称。

meth=obj.method(method_name) #method_name is a string
meth.call = mod

我收到以下错误:

未定义的方法`call ='for#(NoMethodError)

我正在使用Sequel ORM并且必须动态保存模型关联。 如果我直接调用method_name(当method_name不是字符串时),则以下工作

obj.method_name = mod #working

但是,当method_name是字符串时,以下内容会出现语法错误:

obj.send(method_name) = mod #not working

语法错误,意外'=',期待keyword_end

所以我无法使用上述任何方式以字符串形式从名称中调用方法。

2 个答案:

答案 0 :(得分:3)

如果名为method_name的方法采用mod参数,请尝试:

obj.send(method_name, mod)

如果您要分配某些内容,则method_name应以=结尾。

答案 1 :(得分:0)

call的正确语法是

call(args, ...)

[ref]

(请勿在调用后放置=,只列出以逗号分隔的arguemnts)

同样Ingenu's方法,也是做类似事情的好方法(可能更好)。