“Enumerable#inject”中的符号与Proc

时间:2013-01-25 17:08:13

标签: ruby symbols inject enumerable proc

鉴于Enumerable#inject可以采用符号或块作为迭代中使用的方法,如this question的答案中所述,是否有任何理由使用{{1}与&中的Symbol#to_proc结合使用?以下对返回相同的结果:

Enumerable#inject

是否存在使用符号和使用块(由[1, 2, 3, 4, 5].inject(:+) [1, 2, 3, 4, 5].inject(&:+) [:a, :b, :c].inject({a: {b: {c: 1}}}, :fetch) [:a, :b, :c].inject({a: {b: {c: 1}}}, &:fetch) 创建)具有不同结果的用例?是否有任何一种可以使用的情况而不是另一种情况?

1 个答案:

答案 0 :(得分:4)

如果您必须支持旧版本的Ruby(1.8.6或更早版本),并且您正在使用为这些版本定义Symbol#to_proc的库(如活动支持),那么使用&的版本会工作,而另一个则不会。

除此之外,两个版本之间的唯一区别是使用符号的版本更快,如果重新定义&,使用Symbol#to_proc的版本将受到影响 - 尽管我无法思考一个有用的案例。所以不,如果你不需要支持Ruby 1.8.6,就没有理由不使用符号形式。