当前位置:  开发笔记 > 后端 > 正文

理解在Ruby中使用lambda的注入行为

如何解决《理解在Ruby中使用lambda的注入行为》经验,为你挑选了1个好方法。

我经常将预配置的lambdas插入可枚举的方法,如'map','select'等,但'inject'的行为似乎有所不同.例如

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'有一个可选的单个参数作为初始值,但这给了我...

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

我的问题是"为什么这样做而不是之前的尝试?"



1> rampion..:

所以原因

(5..10).map &mult4

工作和

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

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

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

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

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

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

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有