↑のようにopenメソッドにブロックを渡すとクローズ処理はいりません。ブロックを定義することにより、ファイルハンドルのスコープが明確になり、ガベージコレクト(GC)できるようですね。
ただ、
open("c:\\okinawa.csv").each {|line| print line }
では、駄目です。クローズ処理が必要です。これだとeachメソッドにブロックを渡しているだけなので、ファイルハンドルのスコープが不明確なのですね。
ちなみに、
begin
s = open("c:\\okinawa.csv") {|f|
s = f
f.each {|line|
print line
raise "fake error!\n"
}
}
rescue => e
print "Error!!" + e
print s.closed? #=>true
end
としてブロック内で例外を発生させてみたら、ちゃんとクローズしてくれていました。なかなか賢いですね。

良かったらクリックお願いします→
