YAML中ruby对象的序列化/反序列化
我试图理解在1.8.7和1.9+版本下使用YAML对ruby对象进行序列化/反序列化的过程,并对此提出了一些疑问(我找不到太多相关文档) Ruby 1.8.7 问题1:现在为什么我没有得到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
标签: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
没有执行syck和pysch解析器
有人能帮我解决这些问题吗?
- 问题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