08/12/12 20:28:12
>>437 >>438
自分が一から設計するならそうしたいんですけどね。
hash_table.delete obj
みたいなコードがあって、今まで obj はメモリ内で完結するオブジェクトでしたが、
あるとき機能追加で File を持つ obj も扱うようになりました。
これを真面目に close するとすると delete する直前の箇所で、
obj.close if obj.respond_to? :close
hash_table.delete obj
としたり、 hash_table の初期化をする箇所で
class << hash_table = Hash.new
alias :__delete :delete
def delete obj
obj.close if obj.respond_to? :close
self.__delete obj
end
end
...
hash_table.delete obj
と hash_table を拡張するのは思い付いたんですが、
hash_table 側のコードを変更するよりは、
機能追加する側の obj の方でどうにか (あわよくば GC で勝手に) close できれば
そっちの方が変更としてはスマートかな、と思いました。
何か良い方法ありますかね?