From: "akira yamada / やまだあきら" Date: 2009-05-27T17:13:18+09:00 Subject: [ruby-dev:38548] Re: Marshaling URI between 1.8 and 1.9 (2009年05月07日 14:41), Yukihiro Matsumoto さんは書きました: > |気がついたんですが、URI オブジェクトを marshal で 1.9 から > |1.8 に移そうとすると失敗します。 > | > |% ruby -v > |ruby 1.9.2dev (2009-05-02 trunk 23326) [i686-linux] > |% ruby-1.8 -v > |ruby 1.8.8dev (2009-04-22 revision 23257) [i686-linux] > | > |% ruby -ruri -e 'Marshal.dump(URI("http://example.org"), STDOUT)' > u19 > |% ruby-1.8 -ruri -e 'Marshal.load(STDIN)' < u19 > |-e:1:in `load': undefined class/module URI::Parser (ArgumentError) > | from -e:1 > | > |理由はエラーメッセージに書いてある通りで、1.9 の URI オブジェ > |クトには URI::Parser オブジェクトが入っているのに、1.8 には > |URI::Parser クラスがないからです。 > | > |逆に、1.8 の URI オブジェクトを 1.9 に移すのは、Mashal.load > |までは動きます。 > > |この理由は @parser がないからです。 > > |思うのですが、デフォルトのパーザを使うときはインスタンス変数 > |には記録しないようにするのはどうでしょうか。 > | > |そうすれば、(デフォルトのパーザを使用する URI では) パーザが > |marshal したデータに表れなくなるので、1.8 と 1.9 の間で > |marshal できるようになります。 > > 私はこの変更に賛成です。 akrさん、commitお願いしちゃっていいですか?