Вопрос по ruby – Понимание поведения инжекта, используемого с лямбдой в Ruby

5

Я часто подключаю предварительно сконфигурированные лямбды к перечисляемым методам, таким как «карта», «выбор». и т.п. но поведение «впрыскивать»; кажется другим. например с

mult4 = lambda {|item| item * 4 }

затем

(5..10).map &mult4

дает мне

[20, 24, 28, 32, 36, 40]

Тем не менее, если я сделаю лямбда с 2 параметрами для использования с инъекцией, как это,

multL = lambda {|product, n| product * n }

Я хочу быть в состоянии сказать

(5..10).inject(2) &multL

так как "впрыскивать" имеет дополнительныйsingle параметр для начального значения, но это дает мне ...

irb(main):027:0> (5..10).inject(2) &multL
LocalJumpError: no block given
        from (irb):27:in `inject'
        from (irb):27

Однако, если я напишу '& amp; multL " вsecond параметр, чтобы ввести, тогда это работает.

irb(main):028:0> (5..10).inject(2, &multL)
=> 302400

У меня вопрос "почему это работает, а не с предыдущей попыткой?"

Ваш Ответ

1   ответ
11

Так что причина того, что

(5..10).map &mult4

работает и

(5..10).inject(2) &multL

это не означает, что в первом случае неявные пареновые числа подразумеваются, так что это на самом деле означает

(5..10).map(&mult4)

если вы хотите, для второго случая вы можете использовать

(5..10).inject 2, &multL

Трюк с внешним паренсом работает только для передачи блоков методу, а не лямбда-объектам.

Похожие вопросы