KDDの酒本です。 お答えいただきありがとうございます。 >いろいろ考えられるのですが,とりあえず以下の質問について考え >てください. > > (1) その一時ファイルのようなものはオブジェクトと必ず命運をと > もにする必要がありますか? あるいは特定の処理の間という > 風な限定が出来ますか? > > (2) そのオブジェクトの実装のために拡張モジュールを作る気が > ありますか? それとも全部 rubyで実装したいですか? > >1の答えが「特定の処理の間で構わない」というのでしたら, >ensureを使ってください. > > begin > ... > ensure > system 'rm -f #{一時ファイル}' > end > >とかいう感じになります.しかし,オブジェクトがGCされていなく >なる時にだけ削除したいとなるとちょっと問題です.というのも現 >在のrubyではGCされる時に起動される処理(finalizer)はCでしか, >記述できないからです. とくに、GCされていなくなるときだけという要望はないです。 と、いうより、まだGCについてとか、推奨されるプログラミング のスタイルがどのようなものかわかっていませんでした。 いわれてみればわざとそのようになっているような気もしましたが。 >|GCがどのように作用するのかいまだに判っていないのですが、 >| >|・オブジェクトをもつ変数が別のオブジェクトを持つように >| 上書きされるようなときにGCにより始末される >|・ローカル変数のスコープを出るときに始末の対象になる これは違いましたね。 >「だれからも参照されなくなった」オブジェクトは「GCが起動され >た時に」回収される.GCは内部に割り当てたオブジェクト用の領域 >が足りなくなった時に勝手に呼ばれる.という感じです.参照され >なくなったからといって即座に回収されるわけではありません. この意味がいま初めてわかった気がしました。原さんのコメントも もっともです。ちょっと勘違いしてました。 -- 酒本定幸 KDD 交換サービス技術部 03-3347-7429 sakamoto / tsc.sjk.kdd.co.jp