如果在循环内发生了不好的事情,通过io.lines打开的文件句柄会发生什么?文档说文件将在文件结束时自动关闭,并且对于特殊情况没有任何说明(例如在dosomething()中访问nil值。
for line in io.lines("myfile.txt") do
dosomething(line);
end
有谁知道lua会如何处理这种情况?
答案 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;再打开了。