Tôi thường cắm lambdas được cấu hình sẵn vào các phương pháp có thể đếm được như 'bản đồ', 'chọn', v.v. nhưng hành vi của 'tiêm' có vẻ khác. ví dụ: vớiHiểu hành vi của tiêm được sử dụng với lambda trong Ruby
mult4 = lambda {|item| item * 4 }
sau đó
(5..10).map &mult4
mang lại cho tôi
[20, 24, 28, 32, 36, 40]
Tuy nhiên, nếu tôi thực hiện một lambda 2 thông số để sử dụng với một bơm như vậy,
multL = lambda {|product, n| product * n }
Tôi muốn có thể nói
(5..10).inject(2) &multL
từ 'bơm' có một tùy chọn đơn tham số cho giá trị ban đầu, nhưng điều đó mang lại cho tôi ...
irb(main):027:0> (5..10).inject(2) &multL
LocalJumpError: no block given
from (irb):27:in `inject'
from (irb):27
Tuy nhiên, nếu tôi nhồi '& multL' thành một thông số thứ hai để tiêm, sau đó nó hoạt động.
irb(main):028:0> (5..10).inject(2, &multL)
=> 302400
Câu hỏi của tôi là "tại sao điều đó hoạt động chứ không phải nỗ lực trước đó?"