なかだです。 At Fri, 10 Oct 2003 12:14:05 +0900, 岩崎 弘孝 wrote: > これとよく似たコードを作ったつもりでしたが、上手くいかない部分が > ありました。でなにが違うか検討してから再度連絡します。 上手くいかない部分というのがどういうものか分かりませんが、もし finalizerが実行されないということなら、finalizerの中で対象オブ ジェクトを参照していたりしませんか。インスタンスメソッドの中で 作ったブロックからは、selfとして参照されています。 > 元の質問とは直接関係しませんが、コードに関する追加の質問です。 > 1.@dirtyは単にデータが変更されたことを示すフラグとして利用しているだ > け? そうです。finalizerへ何か通知する場合の一例です。 > 2.@dirtyが配列として定義している意味は? 単に false/true だけでは、finalizerに変更を伝えることはできませ ん。finalizerに渡された値と、その後@dirtyに代入される値はまった く無関係だからです。CやC++ならポインタや参照を使うところですが、 Rubyには変数に対する参照というものは言語仕様上存在しないので、 便宜上コンテナオブジェクトを利用しています。Javaのように専用の コンテナクラス(Booleanなど)を作ることも可能ですが、RubyのArray はなんでも容れられるのでほとんどの場合はこれで充分でしょう。 あとは、lib/tempfile.rbなども参考にしてみてください。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦