【问题标题】:Symbol vs. Proc in `Enumerable#inject``Enumerable#inject` 中的符号与 Proc
【发布时间】:2013-01-09 17:06:35
【问题描述】:

鉴于Enumerable#inject 可以将符号或块作为迭代中使用的方法,正如this question 的回答中所解释的那样,是否有任何理由将& 与@ 结合使用987654324@ 在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)

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

【问题讨论】:

    标签: ruby symbols inject enumerable proc


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-11-21
      • 2014-01-19
      • 2015-10-29
      • 1970-01-01
      • 2012-07-22
      • 2012-10-09
      • 2020-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多