符号与“枚举#注入”中的 Proc



鉴于Enumerable#inject可以将符号或块作为迭代中使用的方法,如对此问题的回答中所述,是否有任何理由将&Enumerable#inject中的Symbol#to_proc结合使用?以下对返回相同的结果:

[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)

是否有任何用例,使用符号和使用块(由&创建)会产生不同的结果?是否有任何情况可以使用一个而不能使用另一个?

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

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

最新更新