如何在lambda表达式中使用`[]`?

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

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

2个回答

4

文档

prc[params,...] → obj

执行代码块,将params中的值传递给代码块作为参数,并使用类似于方法调用语义。如果向期望一个参数的proc中传递多个值,则会生成警告(以前会将这些参数默认转换为数组)。请注意,prc.() 调用了 prc.call() 并传递给定的参数。这是一种隐藏“call”操作的语法糖。

对于使用lambda或->()创建的procs,如果向具有多个参数的proc传递错误数量的参数,则会生成错误。对于使用Proc.new或Kernel.proc创建的procs,额外的参数会被自动忽略。


3
对于你的第一个问题,proc.()是一种hack,因为Ruby不允许你在对象上定义()。它只是proc.call()的语法糖。
对于你的第二个问题,Proc上使用方括号调用它

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接