所以我在Ruby 2.4.0中运行了一些基准并意识到了这一点
(1...1000000000000000000000000000000).sum
Run Code Online (Sandbox Code Playgroud)
立即计算,而
(1...1000000000000000000000000000000).inject(:+)
Run Code Online (Sandbox Code Playgroud)
需要很长时间,我只是中止了操作.我的印象Range#sum是别名,Range#inject(:+)但似乎不是这样.那怎么sum工作,为什么它比这快得多inject(:+)?
NBEnumerable#sum(由其实现Range)的文档没有说明延迟评估或其他任何内容.
ruby ×1