Bri*_*ian 21 ruby functional-programming
Ruby在通过Proc.new和lambda(或->()1.9中的运算符)创建的Proc之间存在差异.似乎非lambda Procs将在一个块参数中传递一个数组.通过lambda创建的过程不会.
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)
Run Code Online (Sandbox Code Playgroud)
有没有人对这种行为背后的动机有任何见解?
Jör*_*tag 39
lambdas和非lambda之间有两个主要区别Proc:
Proc从封闭方法返回,就像块一样.Proc有松散的参数检查,就像块一样.或者,简而言之:lambda表现得像方法,非lambda Proc表现得像块.
您所看到的是#2的实例.除了非lambda Proc和lambda之外,还可以尝试使用块和方法,你会看到.(没有这种行为,Hash#each将是一个真正的 PITA使用,因为它确实产生了一个包含两个元素的数组,但你几乎总是希望将它视为两个参数.)