【问题标题】:Ruby String to method name Error: undefined method `call=' for #<Method:0xa396aac> (NoMethodError)方法名称的 Ruby 字符串错误:#<Method:0xa396aac> 的未定义方法 `call=' (NoMethodError)
【发布时间】:2023-03-28 05:34:01
【问题描述】:

我必须动态调用对象 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

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

【问题讨论】:

标签: ruby sequel


【解决方案1】:

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

obj.send(method_name, mod)

如果您要分配一些东西,那么method_name 应该以= 结尾。

【讨论】:

    【解决方案2】:

    call 的正确语法是

    call(args, ...)
    

    [ref]

    (不要在调用后放=,只需列出以逗号分隔的argumentmnts)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      • 1970-01-01
      相关资源
      最近更新 更多