From: Hiroshi Moriyama Date: 2008-10-24T14:27:14+09:00 Subject: [ruby-dev:36899] [Bug #667] yaml が Complex、Rational をうまくあつかえていない チケット #667 が更新されました。 (by Hiroshi Moriyama) ファイル yaml-fix-suport-for-ratoinal-and-complex.diff 追加 Quoted from : > 組み込みに対応できていません。 > > main@187-20080811> Rational(1,2).to_yaml > #=> "--- !ruby/object:Rational \ndenominator: 2\nnumerator: 1\n" > main@187-20080811> YAML.load(Rational(1,2).to_yaml) > #=> Rational(1, 2) > > main@190-20081020> Rational(1,2).to_yaml > #=> "--- !ruby/object:Rational {}\n\n" > main@190-20081020> YAML.load(Rational(1,2).to_yaml) > #=> (0/1) このパッチ(redmineに添付)でどうでしょうか。互換性を保つため、 ruby 1.8.5 以降と同じ形式のYAMLデータを読み書きする様にしまし た。次の様になります: % ruby1.8 -v ruby 1.8.7 (2008-10-22 revision 19775) [i686-linux] % ruby1.8 -ryaml -rrational -e 'puts Rational(1,2).to_yaml' > /tmp/ruby_1_8_rational.yaml % cat /tmp/ruby_1_8_rational.yaml --- !ruby/object:Rational denominator: 2 numerator: 1 % ruby -ryaml -ve 'p YAML.load(ARGF.read)' < /tmp/ruby_1_8_rational.yaml ruby 1.9.0 (2008-10-24 revision 19843) [i686-linux] (1/2) % ruby -ryaml -e 'puts Rational(1,2).to_yaml' > /tmp/ruby_1_9_rational.yaml % diff /tmp/ruby_1_8_rational.yaml /tmp/ruby_1_9_rational.yaml % ついでに ruby 1.8.3 の形式の読取にも対応してあります(1.8.4は コンパイルできなかったので未確認): % ruby1.8.3 -v ruby 1.8.3 (2005-09-21) [i686-linux] % ruby1.8.3 -ryaml -rrational -e 'puts Rational(1,2).to_yaml' > /tmp/ruby_1_8_3_rational.yaml % cat /tmp/ruby_1_8_3_rational.yaml !ruby/object:Rational 1/2 % ruby -ryaml -ve 'p YAML.load(ARGF.read)' < /tmp/ruby_1_8_3_rational.yaml ruby 1.9.0 (2008-10-24 revision 19843) [i686-linux] (1/2) % -- Hiroshi Moriyama ---------------------------------------- http://redmine.ruby-lang.org/issues/show/667 ---------------------------------------- http://redmine.ruby-lang.org