Я часто подключаю предварительно сконфигурированные лямбды к перечисляемым методам, таким как «карта», «выбор» и т. Д.
но поведение «впрыскивать» кажется другим.
например с
mult4 = lambda {|item| item * 4 }
тогда
(5..10).map &mult4
дает мне
[20, 24, 28, 32, 36, 40]
Однако, если я сделаю лямбду с двумя параметрами для использования с инъекцией, как это,
multL = lambda {|product, n| product * n }
Я хочу иметь возможность сказать
(5..10).inject(2) &multL
, поскольку в 'inject' есть необязательный параметр single для начального значения,
но это дает мне ...
irb(main):027:0> (5..10).inject(2) &multL
LocalJumpError: no block given
from (irb):27:in `inject'
from (irb):27
Однако, если я вставлю '& multL' в параметр second для ввода, то это сработает.
irb(main):028:0> (5..10).inject(2, &multL)
=> 302400
Мой вопрос: «Почему это работает, а не с предыдущей попыткой?»