3

鉴于Enumerable#inject可以将符号或块作为迭代中使用的方法,如对此问题的回答中所述,是否有任何理由将 the&Symbol#to_procwithin结合使用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)

是否存在使用符号和使用块(由创建&)有不同结果的用例?有没有一种可以使用而另一种不能使用的情况?

4

1 回答 1

4

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

除此之外,两个版本之间的唯一区别是使用符号的版本更快,并且&如果重新定义,使用的版本会受到影响Symbol#to_proc——尽管我想不出有什么用处。所以不,如果您不需要支持 Ruby 1.8.6,那么没有理由不使用符号形式。

于 2013-01-25T17:33:37.987 回答