File.open и блоки в Ruby 1.8.7

Я новичок в Ruby и сейчас читаю книгу Pickaxe, чтобы познакомиться со всем. Я наткнулся на раздел File.open, где обсуждается использование блока в качестве параметра для вызова File.open, а затем гарантия закрытия файла. Теперь это звучит как абсолютно блестящий способ избежать ранения себе в ногу, и, поскольку я опасно низко на ногах, я думаю, что попробую. Вот что я написал (в irb, если это имеет значение):

File.open('somefile.txt', 'r').each { |line| puts line }``

Я ожидал, что файл somefile.txt будет открыт, прочитан, напечатан и закрыт, верно? Насколько я могу судить неправильно. Если я использую lsof для просмотра дескрипторов открытых файлов, он все равно открыт. Однако, если я использую

f = File.open('somefile.txt', 'r').each { |line| puts line }
f.close()

Я неправильно использую блоки в этом примере или мне не удалось понять значение File.open при использовании с блоком. Я прочитал раздел на ruby-doc.org, связанный с File.open , но это, кажется, только подтверждает, что то, что я делаю, должно работать должным образом.

Может ли кто-нибудь объяснить, что я делаю неправильно?

6
задан Andrew Grimm 26 July 2011 в 23:12
поделиться