Ruby has differences between Procs created via Proc.new
and lambda
(or the ->()
operator in 1.9). It appears that non-lambda Procs
There are two main differences between lambdas and non-lambda Proc
s:
Proc
s return from the enclosing method, just like blocks.Proc
s have loose argument checking, just like blocks.Or, in short: lambdas behave like methods, non-lambda Proc
s behave like blocks.
What you are seeing there is an instance of #2. Try it with a block and a method in addition to a non-lambda Proc
and a lambda, and you'll see. (Without this behavior, Hash#each
would be a real PITA to use, since it does yield an array with two-elements, but you pretty much always want to treat it as two arguments.)