From: Yukihiro Matsumoto Date: 2008-10-22T17:37:05+09:00 Subject: [ruby-dev:36863] Re: [Bug #650] Marshal.load raises RegexpError まつもと ゆきひろです In message "Re: [ruby-dev:36836] Re: [Bug #650] Marshal.load raises RegexpError" on Tue, 21 Oct 2008 16:30:57 +0900, Urabe Shyouhei writes: |ユーザーアプリケーション側は変換に失敗したかどうかを==で判定するとおもわ |れるので、nilみたいなものよりも普通のObject.newのほうがいいんじゃないで |しょうか。 | | # rb_define_const(rb_mMarshal, "Invalid", rb_obj_alloc(rb_cObject); | obj = Marshal.load src, invalid: :replace | obj == Marshal::Invalid and raise "invalid data" | |ObjectのインスタンスをMarshal.load(Marshal.dump)したものはもとのインスタ |ンスとは==にならないからこれで問題ないとおもいます。 ふむ。この線で対応しようかなと思うのですが、まだもう少しつめ きれていない気がします。以下にいろいろと考えを書き連ねておき ますので、意見があれば聞かせてください。 * オブジェクト再生時に例外が発生したらObject.newに置き換え る挙動はデフォルトか? * 切り替え可能か(いつも置き換えてはいけないか) * Object.newにはどのような情報を持たすべきか * 特定のマーカーになるオブジェクト(使いまわす) * 単にObject.new * 特定のクラス(or Struct)のインスタンス * 例外や失敗した復元情報を含む? いろいろ難しいものだ。 まつもと ゆきひろ /:|)