From: Yukihiro Matsumoto Date: 2009-05-07T14:41:55+09:00 Subject: [ruby-dev:38381] Re: Marshaling URI between 1.8 and 1.9 まつもと ゆきひろです In message "Re: [ruby-dev:38377] Marshaling URI between 1.8 and 1.9" on Wed, 6 May 2009 14:21:34 +0900, Tanaka Akira writes: |気がついたんですが、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 できるようになります。 私はこの変更に賛成です。