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

如果在 io.lines 循环内部发生了一些不好的事情,那么通过文件句柄打开的文件会发生什么呢?文档说当到达文件结尾时,文件会自动关闭,但对于异常情况(例如在 dosomething() 中访问空值),文档中没有任何说明。

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

有人知道 Lua 如何处理这种情况吗?

点赞
用户204011
用户204011

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

如果你在 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中,它将不再是打开的。

2015-12-15 08:27:47