Я довольно новичок в ruby, и сейчас я читаю книгу «Кирка», чтобы ознакомиться со всем.Я натолкнулся на раздел 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 , но это только подтверждает, что то, что я делаю, должно работать так, как ожидалось.
Может кто-нибудь объяснить, что я делаю не так?