5}, 2, 3].lazy.map{ |i| i} #=> #5}, 2, 3]>:map> z.first #=> {"x"=>5} 当我尝试将 z 转换-6ren">
gpt4 book ai didi

ruby - 惰性 JSON 编码

转载 作者:数据小太阳 更新时间:2023-10-29 07:55:52 26 4
gpt4 key购买 nike

考虑以下几点:

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 不处理枚举器。它只转储其字符串符号:

> [].to_enum.to_json
=> "\"#<Enumerator:0x00000002503190>\""

您需要先将枚举器转换为数组:

> z.to_a.to_json
=> "[{\"x\":5},2,3]"

为了进一步说明,数组有自己的生成器模块:

> [].method(:to_json).owner
=> JSON::Ext::Generator::GeneratorMethods::Array

而枚举器只有默认值:

> [].to_enum.method(:to_json).owner
=> JSON::Ext::Generator::GeneratorMethods::Object

关于ruby - 惰性 JSON 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25250911/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com