【发布时间】:2014-08-11 19:29:57
【问题描述】:
考虑以下几点:
z = [{"x" => 5}, 2, 3].lazy.map{ |i| i}
#=> #<Enumerator::Lazy: #<Enumerator::Lazy: [{"x"=>5}, 2, 3]>:map>
z.first
#=> {"x"=>5}
当我尝试将z 转换为 JSON 时,我得到以下意外结果:
z.to_json
#=> "\"#<Enumerator::Lazy:0x00000001cb0448>\""
为什么to_json 不枚举这个惰性枚举器?
【问题讨论】:
-
to_json应该请求什么? -
集合中的每个项目。
-
不,它不要求每个项目。
-
对不起,我的评论有误。懒惰是无关紧要的(除了它在内部将接收器转换为枚举器的事实)。真正的答案是:因为
z是一个枚举数。 -
也许是因为
(1..Float::INFINITY)之类的东西可能存在问题,但我同意我希望to_json只是迭代所有内容。您可以使用to_a.to_json而不是仅使用.to_json强制它。
标签: ruby lazy-evaluation