我正在尝试在 1.8.7 和 1.9+ 下使用 YAML 了解 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
红宝石 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不被调用 on YAML.load?1.9+ 下不支持吗?
   YAML::ENGINE.yamler = 'syck'
   => syck
   u =  Element.new.to_yaml
   => "--- !ruby/object:Element {}\n\n" 
问题 4(类似于问题 #1):为什么上面的 yamltag:ruby.yaml.org,2002:Element中缺少 tag()serialize
   YAML.load(e)
   =>  ## Suprisingly, print is not executed 
问题 5(类似于问题 #2):为什么在 ruby 1.9+ 中没有self.yaml_new执行syck和pysch解析器?
谁能帮我解决这些问题?