当我运行这个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
是不一样的。