`[]`如何与lambdas一起使用

时间:2013-09-12 20:53:31

标签: ruby lambda

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

我不知道它应该或不应该起作用。大部分时间我都使用方括号和数组。

2 个答案:

答案 0 :(得分:4)

文档

prc[params,...] → obj

  

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

     

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

答案 1 :(得分:3)

对于您的第一个问题,proc.()是一个黑客攻击,因为Ruby不允许您在对象上定义()。这只是proc.call()的语法糖。

关于第二个问题,using square brackets on a Proc calls it