【发布时间】:2014-02-13 19:44:10
【问题描述】:
为什么默认情况下 Ruby Enumerator 的行为不像 Enumerator::Lazy?
在任何情况下有人想要使用非懒惰的Enumerator?
已编辑:
下面对向后兼容性答案的评论,解释了为什么我还不相信:
假设我们在 Ruby 2.0.0 中添加了这些“重大”更改,这是一个主要版本,您在进行切换之前会彻底测试您的代码(特别是如果您要进行生产),不是吗?
编辑#2
我怀疑它与效率有关(如果有任何问题,请告诉我),所以我做了以下基准测试:(当然有些地方懒惰更好。这可能是为了证明为什么 Ruby 不是一直在使用懒惰?)
require 'fruity'
require 'prime'
compare do
lazy {
g = Prime::EratosthenesGenerator.new; 1000.times { g.lazy.take(100).to_a }
}
diligent {
g = Prime::EratosthenesGenerator.new; 1000.times { g.take(100).to_a }
}
end
我得到以下信息:(可能是由于调用了.lazy 方法而不是从一开始就使用Enumerator::Lazy?)
diligent is faster than lazy by 19.999999999999996% ± 1.0%
【问题讨论】:
-
好问题! +1 ..顺便说一句我不知道
-
哈哈 :-) 等待好的答案!
-
@ArupRakshit 您使用的客户端是否会在询问 ruby 问题时通知您?
-
哈哈.. 酷 :-) .. 我问是因为你太快了!
-
@uDaY 不是 Firefox 浏览器,没有插件..