ふと気がついたのですが、File.open にブロックを与えると有無をいわさず
IO#close を呼ぶようです。たとえば、
% ruby -e '
class C < File
def close
p :called
super
end
end
C.open("/dev/null") {|f| p f; p f.method(:close) }
'
#<C:/dev/null>
#<Method: C#close>
というように、サブクラス C で再定義されていても、IO のメソッドが直接呼
ばれます。つまり、上の例でいえば :called と出力されることを期待したの
にそうなりません。
(File#close を定義して、Kernel#open を呼んだときなども同様です。)
これって意図的でしょうか?
ちょっと自前でバッファリングしてみようかな、と思ったのですが...
--
[田中 哲][たなか あきら][Tanaka Akira]