鉴于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)
创建)具有不同结果的用例?是否有任何一种可以使用的情况而不是另一种情况?
答案 0 :(得分:4)
如果您必须支持旧版本的Ruby(1.8.6或更早版本),并且您正在使用为这些版本定义Symbol#to_proc
的库(如活动支持),那么使用&
的版本会工作,而另一个则不会。
除此之外,两个版本之间的唯一区别是使用符号的版本更快,如果重新定义&
,使用Symbol#to_proc
的版本将受到影响 - 尽管我无法思考一个有用的案例。所以不,如果你不需要支持Ruby 1.8.6,就没有理由不使用符号形式。