在Ruby中,使用Proc.new
和lambda
(或1.9中的->()
运算符)创建的Proc之间存在差异。似乎非lambda Proc会将传递的数组展开到块参数上;而通过lambda创建的Proc则不会。
p = Proc.new { |a,b| a + b}
p[[1,2]] # => 3
l = lambda { |a,b| a + b }
l[[1,2]] # => ArgumentError: wrong number of arguments (1 for 2)
有人能解释一下这种行为背后的动机吗?
l = lambda{ |(a,b)| a+b }; l[[1,2]] #=> 3
。它定义了一个名为l
的 lambda 函数,该函数接受一个带有两个元素的数组作为参数,并返回这两个元素的总和。在调用l
函数时,它被传递一个数组[1,2]
作为参数,因此返回值为3
。 - Phrogz