【发布时间】:2008-09-19 14:16:41
【问题描述】:
我经常将预先配置的 lambda 插入到可枚举的方法中,例如“map”、“select”等。 但“注入”的行为似乎有所不同。 例如与
mult4 = lambda {|item| item * 4 }
然后
(5..10).map &mult4
给我
[20, 24, 28, 32, 36, 40]
但是,如果我制作一个 2 参数 lambda 用于像这样的注入,
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
我的问题是“为什么这行得通,而不是之前的尝试?”
【问题讨论】: