我经常将预先配置的 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

因为“注入”有一个可选的 单身的 初始值的参数,但这给了我...

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

但是,如果我将 '&multL' 填充到 第二 参数注入,然后就可以了。

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

我的问题是“为什么这个有效,而不是之前的尝试?”

有帮助吗?

解决方案

所以

的原因
(5..10).map &mult4

有效,

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

并不是第一种情况下隐含的ruby parens,所以它的确意味着

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

如果你愿意,对于第二种情况,你可以使用

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

parens技巧的外部仅适用于将块传递给方法,而不是lambda对象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top