了解 Ruby 中与 lambda 一起使用的注入行为
题
我经常将预先配置的 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对象。
不隶属于 StackOverflow