From: Hideto ISHIBASHI Date: 2000-06-22T12:20:07+09:00 Subject: [ruby-list:23446] Re: dump a single object 石橋"rubyholic"秀仁です。どうも。 From: Masatoshi SEKI Subject: [ruby-list:23436] Re: dump a single object > 咳といいます。 > > > > marshal.c読んでいて思ったんですけど、どうでしょう。 > > > オブジェクトの構造をなめたりする作業はmarshalに任せて > > > marshalフォーマットの echoder/decoder みたいなの。 > > > > marshal.c の [rw]_{byte,long} あたりの関数をそれぞれ Marshal > > のメソッドにするような感じでしょうか、だいたい。 > > もうちょっと高次の関数というかセンテンスかもしれないです。 > > Marshalは単純にオブジェクトの写像があるだけじゃなくて、 > 共有のための表とかもあるからそういうのも考慮しないと…。 結局ボツな案なのですが、なにかのヒントになればと思うので書きます。 あまり面白くない方法ですが、一番楽だろうと思うのを見つけました。 Builder パターン (つーか Visitor かも) です。現状の marshal.c で、 「共有参照の表を更新するタイミング」と、 「ダンプ出力するタイミング」で、(ブロック) をコールバックします。 新しく作るものは少なくて済むのと、Marshal の互換性は保たれます。 でも marshal.c でコードの無駄な複製が起きるのが問題です・・・ # 既存の marshal_dump(), marshal_load() を書きかえられませんもんね。 -- Hideto "rubyholic" ISHIBASHI http://www.rr.iij4u.or.jp/~hideto-i/ blade clone: http://www.rr.iij4u.or.jp/~hideto-i/rb/yaiba/index.html