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

YAML中ruby对象的序列化/反序列化,ruby,yaml,ruby-1.9,ruby-1.8,ruby-1.8.7,Ruby,Yaml,Ruby 1.9,Ruby 1.8,Ruby 1.8.7,我试图理解在1.8.7和1.9+版本下使用YAML对ruby对象进行序列化/反序列化的过程,并对此提出了一些疑问(我找不到太多相关文档) Ruby 1.8.7 问题1:现在为什么我没有得到标签:ruby.yaml.org,2002:Element而不是--!ruby/Element{}\n\n YAML.load(e) => print your are in "yaml" ##print statement execute all good ## Not sure w

我试图理解在1.8.7和1.9+版本下使用YAML对ruby对象进行序列化/反序列化的过程,并对此提出了一些疑问(我找不到太多相关文档)

Ruby 1.8.7 问题1:现在为什么我没有得到
标签: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+ 问题3: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):为什么上面的
序列化
yaml中缺少标记(
tag:ruby.yaml.org,2002:Element

   YAML.load(e)
   =>  ## Suprisingly, print is not executed 
问题5(类似于问题2):为什么ruby 1.9+中的
self.yaml_new
没有执行syckpysch解析器

有人能帮我解决这些问题吗?

  • 问题1:我对此没有任何答案
  • 问题2:因为Psych正确地处理了它,但是你应该使用
    yaml\u标签
    而不是
    yaml\u标签
  • 问题3:使用
    defyaml\u初始化(标签,val)
    它会工作
  • 问题4:因为它又是Syck,所以它的行为类似于Ruby 1.8
  • 问题5:与第四季度相同

如果让我猜测死刑执行情况,出于安全原因,这可能不会发生。YAML过去是Ruby 1.8.7的内置模块,但现在它是另一个解析器/引擎下的独立模块。Ruby 2.0的文档似乎没有出现在RDOC上,但我认为yaml_new只在Rails中调用,而不是在RubyI中调用。我建议修复格式。所有粗体的文字都像在喊。一点点就可以走很长的路;读起来很痛苦,让我甚至不想去尝试。另外,在这样的情况下,你最多可以问两到三个问题,所以减少你想问的问题!ruby 1.8.7是不是你有5个问题,在阅读时看起来是,“为什么在一个不受支持的版本中,一个不受支持的库中有一个bug?”我相信这不是你想问的。如果你把问题简化为“给定X,我如何让Y工作?”你更有可能得到答案。我是@zhon的,你应该问真正的问题,除非这些问题是出于好奇。无论如何,Ruby YAML解析器的旧版本非常混乱,并且有不止一个不一致的地方,所以我对这些奇怪的行为并不感到惊讶,只要看看它们的奇怪之处就知道了
   YAML.load(e)
   =>    ## The print is not getting printed 
   YAML::ENGINE.yamler = 'syck'
   => syck
   u =  Element.new.to_yaml
   => "--- !ruby/object:Element {}\n\n" 
   YAML.load(e)
   =>  ## Suprisingly, print is not executed