Ответ 1
Существуют два основных различия между лямбдами и не-лямбдой Proc
s:
- Подобно методам, lambdas возвращается от себя, тогда как non-lambda
Proc
возвращается из метода размещения, подобно блокам. - Подобно методам, lambdas имеет строгую проверку аргументов, в то время как non-lambda
Proc
имеет проверку правильных аргументов, подобно блокам.
Или, короче: lambdas ведут себя как методы, не-lambda Proc
ведут себя как блоки.
Что вы видите, есть экземпляр №2. Попробуйте с блоком и методом в дополнение к не-лямбда Proc
и лямбда, и вы увидите. (Без этого поведения Hash#each
будет реальной PITA для использования, поскольку он дает массив с двумя элементами, но вы почти всегда хотите рассматривать его как два аргумента.)