gpt4 book ai didi

ruby - Ruby 1.8.7 中的 File.open 和 block

转载 作者:数据小太阳 更新时间:2023-10-29 07:05:21 27 4
gpt4 key购买 nike

我是 ruby​​ 的新手,目前正在阅读 Pickaxe 一书以熟悉所有内容。我遇到了 File.open 部分,其中讨论了将 block 作为 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()

我在这个例子中使用的 block 是错误的还是我没有理解 File.open 与 block 一起使用时的含义。我读过关于 ruby-doc.org related to File.open 的部分但这似乎证实了我正在做的事情应该按预期工作。

谁能解释我做错了什么?

最佳答案

为了在 block 后关闭文件,您应该将 block 传递给 File.open()直接,而不是 each:

File.open('somefile.txt', 'r') do |f| 
f.each_line { |l| puts l }
end

File.open(...).each {...} 只是迭代打开的文件而不关闭它。

关于ruby - Ruby 1.8.7 中的 File.open 和 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6833887/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com