发生错误时io.lines(filename)是否关闭了文件?

时间:2015-12-15 07:59:29

标签: file-io lua

如果在循环内发生了不好的事情,通过io.lines打开的​​文件句柄会发生什么?文档说文件将在文件结束时自动关闭,并且对于特殊情况没有任何说明(例如在dosomething()中访问nil值。

for line in io.lines("myfile.txt") do
    dosomething(line);
end

有谁知道lua会如何处理这种情况?

1 个答案:

答案 0 :(得分:2)

当引用它的对象最终被垃圾收集时,该文件将被关闭。

如果您使用的是Unix系统,可以使用以下程序尝试:

local f = function()
    for line in io.lines("myfile.txt") do
        print("1")
        io.read()
        error(line)
    end
end

pcall(f)

print("2")
io.read()

collectgarbage("collect")

print("3")
io.read()

如果您在步骤1中运行lsof,则会看到该文件已打开。在第2步,它很可能仍然是开放的。在第3步,它赢得了#39;再打开了。