From: Urabe Shyouhei Date: 2008-10-21T16:30:57+09:00 Subject: [ruby-dev:36836] Re: [Bug #650] Marshal.load raises RegexpError 卜部です。 Yukihiro Matsumoto さんは書きました: > |じゃあ妥協案ですけど、Marshal.loadに invalid: :replace とか受け取れるよ > |うにしません? > > 基本的にはいいアイディアだと思います。この場合、APIは > > Marshal.load(src, invalid: :replace) > > とかにするんですかね。その場合、再生に失敗したオブジェクトは > なにに置換したらよいのでしょうか。nil? > ユーザーアプリケーション側は変換に失敗したかどうかを==で判定するとおもわ れるので、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)したものはもとのインスタ ンスとは==にならないからこれで問題ないとおもいます。