有时我发现自己需要打开一个文件,读取它的内容并进行一些功能操作并将数据存储到一个变量中。这将得到以下代码行:
@some_vars = File.open("items.txt").read.chomp!.split(',')
我在这里有两个问题:
- File 实例是否
File.open()
在此行之后关闭? - 如何在不牺牲可读性的情况下关闭这样的 File 实例?
您发布的示例不会自动关闭文件描述符。您必须在描述符上手动调用 File#close,或者让 Ruby 在解释器退出时自动关闭文件。
如果要自动关闭文件,则需要File#open 块语法:
File.open('items.txt') { |f| f.read.chomp!.split(',') }
Ruby 将在块终止时关闭文件。
即使使用 block inFile.open
也不能确保文件将始终关闭,例如,当应用程序挂起时。有一个技巧可以防止这种情况。
f = File.open('items.txt', 'w')
at_exit { f.flush; f.close }
然后at_exit
块将在应用程序结束或程序退出时执行。