From: Stefano Crocco Date: 2007-03-04T01:07:15+09:00 Subject: Re: YAML issue with Set? Alle sabato 3 marzo 2007, thebox ha scritto: > What am I doing wrong? As far as I can tell (I'm not a YAML expert), no. I've made a few trials, and it seems that class Hash (which is used internally by Set), has problems with loading / dumping when keys are custom classes. For instance, using irb (ruby -v gives ruby 1.8.5 (2006-12-25 patchlevel 12) [i686-linux], on gentoo) : >> require 'yaml' => true >> class C >> end => nil >> c=C.new => # >> h={c=>'test'} => {#=>"test"} >> str=YAML.dump h => "--- \n!ruby/object:C ? {}\n: test\n\n" >> h1=YAML.load str ArgumentError: syntax error on line 2, col -1: `: test ' from /usr/lib/ruby/1.8/yaml.rb:133:in `load' from /usr/lib/ruby/1.8/yaml.rb:133:in `load' from (irb):7 >> YAML can't convert the string it just produced to a Hash. I've been able (with blind trials and using the documentation at http://yaml4r.sourceforge.net/cookbook/, in particular the section on ranges) to modify the string produced by dump to make it load again. The original string is: --- !ruby/object:C ? {} : test The modified one is: --- ? !ruby/object:C {} : test It seems that the problem arises from the fact that the dump puts the ? (which, if I understand correctly, should mark a hash key) after the type of the object (the !ruby/object:C part), while load (correctly, I think) wants it before the type. There is a bug report for this problem: http://rubyforge.org/tracker/?group_id=426&atid=1698&func=detail&aid=8886 Stefano