=begin
Quoted from URL:http://redmine.ruby-lang.org/issues/show/667:
組み込みに対応できていません。
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 hiroshi@kvd.biglobe.ne.jp
=end