Ruby имеет различия между Procs, созданными с помощью Proc.new
и lambda
(или оператора ->()
в 1.9). Похоже, что non-lambda Procs будет отображать массив, переданный через аргументы блока; Procs, созданные через лямбда, не делают.
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)
Есть ли у кого-нибудь понимание мотивов этого поведения?