From: Minero Aoki Date: 2003-10-09T06:42:06+09:00 Subject: [ruby-dev:21555] marshal_dump & IO 青木です。 以下のように、シリアライズ不可能なオブジェクトを marshal_dump で 返すと、(ダンプ時ではなく) ロード時にエラーになります。 class C def marshal_dump STDIN end def marshal_load( data ) end end Marshal.load(Marshal.dump(C.new)) % ruby ~/tmp/marshal_c marshal_c:8:in `load': marshal data too short (ArgumentError) from marshal_c:8 こうでしょうか。 ------------------------------------------------------------------- 青木峰郎 Index: marshal.c =================================================================== RCS file: /src/ruby/marshal.c,v retrieving revision 1.103 diff -u -p -r1.103 marshal.c --- marshal.c 6 Oct 2003 07:23:40 -0000 1.103 +++ marshal.c 7 Oct 2003 05:45:05 -0000 @@ -492,7 +492,7 @@ w_object(obj, arg, limit, weak) v = rb_funcall(obj, s_mdump, 0, 0); w_byte(TYPE_USRMARSHAL, arg); w_unique(rb_class2name(CLASS_OF(obj)), arg); - w_object(v, arg, limit, Qtrue); + w_object(v, arg, limit, Qfalse); c_arg.weak = Qtrue; if (ivtbl) w_ivar(ivtbl, &c_arg); return;