【发布时间】:2011-12-02 13:21:47
【问题描述】:
b1 = Time.now
puts (1..100000).inject(0) { |x, y| x + y }
a1 = Time.now
puts "Time for inject: #{a1 - b1}"
b2 = Time.now
sum = 0
(1..100000).each do |value|
sum += value
end
puts sum
a2 = Time.now
puts "Time for each: #{a2 - b2}"
上面的 Ruby 代码比较了两种求和整数的方法。令我惊讶的是,更优雅的 inject 或 reduce 方法优于其他方法。为什么会这样?为什么人们会费心使用低效的 inject 或 reduce?仅仅因为它很优雅?
PS:感谢所有鼓舞人心的答案。我的目的是询问导致差异的幕后情况。
【问题讨论】:
-
如果你在你做的每一件事上都计算纳秒,你就没有时间做任何有成效的事情。另请参阅“过早优化”(尽管不要使用精简版 - 正如完整引用正确地指出的那样,在极少数情况下这样的事情确实很重要)。
-
谢谢。非常周到的建议!
标签: ruby functional-programming reduce inject