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