From: Koji Arai Date: 2001-04-28T02:10:39+09:00 Subject: [ruby-dev:13047] Re: [rubyist:0523] Re:Re:finalizer での例外 新井です。 In message "[ruby-dev:13023] Re: [rubyist:0523] Re:Re:finalizerでの例外" on 23 Apr 2001 14:48:33 +0900, matz@zetabits.com (Yukihiro Matsumoto) wrote: > まつもと ゆきひろです > |Baz で 終了時にファイナライザが呼ばれないように見えるのは > > |の 1254行 で klass を消しているため > > |で引っかかってるようです。これは意図したものなのなのでしょうか? > > 終了時にfinalizerが呼ばれるのは自分に対する解放処理が終了し > た後なので、自分をレシーバとするメソッドは呼べません、少なく > とも現状では。 そうか、GC されたオブジェクトが self であるようなコンテキス トを実行すること自体変な話ですものね。考えが足りませんでした。 > しかし、これだといかなるfinalizerでも同様のことが起きる可能 > 性はありますねえ。もうちょっと考える必要があるかも。 ここで言ってるのはあるファイナライザで参照しているオブジェク トがたまたま先に別のファイナライザを実行したときのことでしょ うか? obj1 = Object.new obj2 = Object.new ObjectSpace.define_finalizer(obj1) { p "final1"; puts obj2.id } ObjectSpace.define_finalizer(obj2) { p "final2"; puts obj1.id } => "final2" 537711926 "final1" Exception `NotImplementedError' at -:4 - method call on terminated object ファイナライザを登録したオブジェクトを参照するスクリプトを書 くのが悪い。。という解釈は強引でしょうか?そうそう害はなさそ うな気はしますが(また考えが足りなさそう) -- 新井康司 (Koji Arai)