【问题标题】:Understanding the behaviour of inject used with a lambda in Ruby了解在 Ruby 中与 lambda 一起使用的注入行为
【发布时间】: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

我的问题是“为什么这行得通,而不是之前的尝试?”

【问题讨论】:

    标签: ruby lambda inject


    【解决方案1】:

    所以原因

    (5..10).map &mult4
    

    工作和

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

    并不是说红宝石括号在第一种情况下是隐含的,所以它真的意味着

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-10-28
      • 2015-10-24
      • 1970-01-01
      • 2016-04-03
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多