卜部です。

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)したものはもとのインスタ
ンスとは==にならないからこれで問題ないとおもいます。