我对Ruby还不太熟悉,目前正在阅读《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的含义。我已经阅读了与File.open相关的ruby-doc.org章节,但似乎只是确认我所做的应该按预期工作。
有人能解释一下我做错了什么吗?