なかだです。 At Fri, 10 Oct 2003 11:25:38 +0900, 岩崎 弘孝 wrote: > 2.クラスCのインスタンス変数と直接関係しないリソースの開放処理であれば > ObjectSpace.define_finalizer で リソース開放を行うProcを定義して処理可能(らしい)。 finalizerが呼ばれる時点では対象のオブジェクトはすでに破棄されて いるのでインスタンス変数としてはアクセスできませんが、finalizer から参照される限りインスタンス変数だったオブジェクト自体はまだ 生きていますから、アクセス可能です。 class C attr_accessor :data def self.save_data_proc(data, dirty, file) proc do if dirty[0] open(file, "w") {|f| Marshal.dump(data, f)} end end end def initialize(*data) @data = data @dirty = [false] fin = self.class.save_data_proc(@data, @dirty, "saved.data") ObjectSpace.define_finalizer(self, fin) end def dirty? @dirty[0] end def dirty=(d) @dirty[0] = d end end -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦