Zrozumienie zachowania wtrysku używanego z lambdą w Ruby
Często podłączam wstępnie skonfigurowane lambdy do wyliczalnych metod, takich jak „map”, „select” itd., Ale zachowanie „inject” wydaje się być inne. na przykład z
<code>mult4 = lambda {|item| item * 4 } </code>
następnie
<code>(5..10).map &mult4 </code>
daje mi
<code>[20, 24, 28, 32, 36, 40] </code>
Jednakże, jeśli zrobię 2-parametrową lambdę do użytku z takim wstrzykiwaniem,
<code>multL = lambda {|product, n| product * n } </code>
Chcę móc powiedzieć
<code>(5..10).inject(2) &multL </code>
ponieważ „inject” ma opcjonalnepojedynczy parametr dla wartości początkowej, ale to daje mi ...
<code>irb(main):027:0> (5..10).inject(2) &multL LocalJumpError: no block given from (irb):27:in `inject' from (irb):27 </code>
Jeśli jednak wrzucę '& multL' dodruga parametr do wstrzyknięcia, to działa.
<code>irb(main):028:0> (5..10).inject(2, &multL) => 302400 </code>
Moje pytanie brzmi „dlaczego to działa, a nie poprzednia próba?”