Ruby 方法调用 element.send() 抛出 ArgumentError



当我运行这个Ruby代码时,我得到了一个ArgumentError: wrong number of arguments calling ``method`` (0 for 1)

def method(element)
return element + 2
end
array = Array.[](1,2,3,4,5)
def map(array, method)
result_array = []
array.each do |element|
# Call the method on the object
value = element.send(method)
# Add to array
result_array.push(value)
end
return result_array
end
map(array, :method)

以这种方式调用该方法有效。

value = method(element)

element.send(method)语法有什么问题?

有了send,你需要value = send(method, element)传递一个方法参数。无需在element上调用它。顺便说一下,Ruby 已经有一个名为method最好不要覆盖它的方法。将其重命名为更有意义的名称,例如add_two.

以这种方式调用该方法有效。

value = method(element)

element.send(method)语法有什么问题?

在您的示例中,element是一个整数,method是一个符号,例如1:method.

所以value = method(element)相当于:

value = method(1)

value = element.send(method)相当于:

value = 1.send(:method)

这基本上是:

value = 1.method

很明显,method(1)1.method是不一样的。

最新更新