3

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" 

tag:ruby.yaml.org,2002:Element質問 1:代わりに が得られなかったのはなぜ--- !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.8.7 ではなく 1.9+ で機能するのはなぜですか?

   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 と同様) :上記の yamltag:ruby.yaml.org,2002:Elementにタグ ( )がないのはなぜですかserialize

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

質問 5 (質問 #2 と同様): Ruby 1.9+ でsyckおよびpyschパーサーself.yaml_newが実行されないのはなぜですか?

誰でもこれらの質問を解決するのを手伝ってもらえますか?

4

1 に答える 1