我有这个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
我不知道它应该或不应该起作用。大部分时间我都使用方括号和数组。
答案 0 :(得分:4)
文档
的 prc[params,...] → obj 强> 的
调用块,使用接近方法调用语义的东西将块的参数设置为params中的值。 如果将多个值传递给proc,则生成警告只需要一个(以前将这些参数静默转换为数组)。 请注意,prc。()使用给定的参数调用prc.call()。隐藏“呼叫”是一种语法糖。
对于使用lambda或 - >()创建的proc,如果将错误数量的参数传递给具有多个参数的Proc,则会生成错误。对于使用Proc.new或Kernel.proc创建的proc,会以静默方式丢弃额外的参数。
答案 1 :(得分:3)
对于您的第一个问题,proc.()
是一个黑客攻击,因为Ruby不允许您在对象上定义()
。这只是proc.call()
的语法糖。