最佳答案
所以我在 Ruby2.4.0中运行了一些基准测试,并意识到
(1...1000000000000000000000000000000).sum
立即计算,而
(1...1000000000000000000000000000000).inject(:+)
花了这么长时间,所以我中止了手术。我的印象是 Range#sum是 Range#inject(:+)的别名,但似乎不是这样的。那么 sum是如何工作的,为什么它比 inject(:+)快那么多呢?
注意: Enumerable#sum的文档(由 Range实现)没有提到任何关于延迟计算的内容或者类似的内容。