4

我有这个 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

我不知道它是否应该或不应该工作。大多数时候,我使用方括号和数组。

4

2 回答 2

4

文档

prc[参数,...] → obj

调用块,使用接近方法调用语义的东西将块的参数设置为 params 中的值。如果将多个值传递给只需要一个值的 proc,则生成警告(以前这会默默地将参数转换为数组)。请注意 prc.() 使用给定的参数调用 prc.call() 。这是隐藏“调用”的语法糖。

对于使用 lambda 或 ->() 创建的 proc,如果将错误数量的参数传递给具有多个参数的 Proc,则会生成错误。对于使用 Proc.new 或 Kernel.proc 创建的 proc,额外的参数会被静默丢弃。

于 2013-09-12T20:58:18.677 回答
3

对于您的第一个问题,proc.()这是一个 hack,因为 Ruby 不允许您()在对象上定义。这只是proc.call().

对于第二个问题,在 a 上使用方括号Proc调用 it

于 2013-09-12T20:59:10.593 回答