あづみです。

あるオブジェクトを Mashal で dump する直前に、そのオブジェクトに特定の
メソッドが定義されていたらそのメソッドをコールし、返ってきたオブジェク
トを変わりに dump するようにするのはどうでしょうか?
(marshal.c の w_object() の頭の方あたりに)


ruby のスクリプトで何らかのデータを保存する時によく Marshal::dump を利
用しているのですが、オブジェクトを全てダンプしてしまうので保存しなくて
もいい情報まで保存してしまうことがあります。上記のような仕組みがあれば、
そのメソッドの中で自分自身を複製し、remove_instance_variable などでいら
ないものを削除、という事ができます。

直接参照されているオブジェクトだけなら dup を再定義するなりして、Marshal
する直前に呼べば良いのですが、そのオブジェクトのインスタンス変数が参照
しているオブジェクトのまた更に…とかなると、うまい解決方法が思い浮かび
ません。不可能ではないですけども…。

# ruby-dev あたりを探せば似たような話題がありそうですが、この辺の話っ
# てとても複雑で追いきれなくて…すみません。


安積伸弥
adzumi / denpa.org