gpt4 book ai didi

ruby - YAML 中的序列化/反序列化 ruby​​ 对象

转载 作者:数据小太阳 更新时间:2023-10-29 08:12:40 24 4
gpt4 key购买 nike

我正在尝试了解在 1.8.7 和 1.9+ 下使用 YAML 的 ruby​​ 对象的序列化/反序列化,并对此有一些疑问(我找不到太多关于此的文档)

ruby 1.8.7

class Element
yaml_as "tag:ruby.yaml.org,2002:Element"

def self.yaml_new(klass, tag, val)
puts "print you are in yaml"
end
end


YAML.parser
=> syck ## parser is set as syck all good
e = Element.new.to_yaml
=> "--- !ruby/Element {}\n\n"

问题 1:现在为什么我没有得到 tag:ruby.yaml.org,2002:Element 而不是 --- !ruby/Element {}\n\n ?

  YAML.load(e) 
=> print your are in "yaml" ##print statement execute all good

## Not sure who to change the parser in 1.8 to `pysch` so skipping this part

ruby 1.9+

  YAML::ENGINE.yamler
=> pysch
e = Element.new.to_yaml
=> "--- !<tag:ruby.yaml.org,2002:Element> {}\n" ## I see the tag in 1.9+ fine

问题 2:为什么它在 1.9+ 中工作而不在 1.8.7 中工作?

   YAML.load(e)
=> ## The print is not getting printed

问题 3:为什么 print you are in yaml 没有被打印出来?换句话说,为什么 self.yaml_new 没有在 YAML.load 上被调用? 1.9+下不支持吗?

   YAML::ENGINE.yamler = 'syck'
=> syck
u = Element.new.to_yaml
=> "--- !ruby/object:Element {}\n\n"

问题 4(类似于问题 #1):为什么 serialize yaml 中缺少标签 (tag:ruby.yaml.org,2002:Element)以上

   YAML.load(e)
=> ## Suprisingly, print is not executed

问题 5(类似于问题 #2):为什么 self.yaml_new 没有在 ruby​​ 中为 syckpysch 解析器执行1.9+?

谁能帮我解决这些问题?

最佳答案

  • 问题 1:我对此没有任何答案
  • 问题 2:因为 Psych 正确处理了它,但您应该使用 yaml_tag 而不是 yaml_tag
  • 问题 3:使用 def yaml_initialize(tag, val) 会起作用
  • 问题 4:因为它又是 Syck,所以它的行为就像在 Ruby 1.8 中一样
  • 问题 5:与 Q4 相同

关于ruby - YAML 中的序列化/反序列化 ruby​​ 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18321929/

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