なかだです。

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はできる。
    中田 伸悦