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