我有这个 lambda(或者闭包是正确的用法?)并且我了解.call
def multi(m)
lambda { |n| n * m }
end
two = multi(2)
two.call(10) #=> 20 #call the proc
但我想了解为什么/如何工作?
two.(20) #=> 40
two[20] #=> 40
我不知道它是否应该或不应该工作。大多数时候,我使用方括号和数组。
文档
调用块,使用接近方法调用语义的东西将块的参数设置为 params 中的值。如果将多个值传递给只需要一个值的 proc,则生成警告(以前这会默默地将参数转换为数组)。请注意 prc.() 使用给定的参数调用 prc.call() 。这是隐藏“调用”的语法糖。
对于使用 lambda 或 ->() 创建的 proc,如果将错误数量的参数传递给具有多个参数的 Proc,则会生成错误。对于使用 Proc.new 或 Kernel.proc 创建的 proc,额外的参数会被静默丢弃。
对于您的第一个问题,proc.()
这是一个 hack,因为 Ruby 不允许您()
在对象上定义。这只是proc.call()
.
对于第二个问题,在 a 上使用方括号Proc
调用 it。