我最近安装了 Ruby 2.0.0,发现它现在有一个用于 Enumerable mixin 的惰性方法。根据以前在函数式语言方面的经验,我知道这可以提高代码的效率。
我做了一个懒惰与渴望的基准测试(不确定它是否没有实际意义),发现懒惰的速度越来越快。为什么是这样?是什么让惰性求值更适合大输入?
基准代码:
#!/usr/bin/env ruby
require 'benchmark'
num = 1000
arr = (1..50000).to_a
Benchmark.bm do |rep|
rep.report('lazy') { num.times do ; arr.lazy.map { |x| x * 2 }; end }
rep.report('eager') { num.times do ; arr.map { |x| x * 2}; end }
end
基准报告样本:
user system total real
lazy 0.000000 0.000000 0.000000 ( 0.009502)
eager 5.550000 0.480000 6.030000 ( 6.231269)