Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File io 发生错误时io.lines(文件名)是否关闭了文件?_File Io_Lua - Fatal编程技术网

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

File io 发生错误时io.lines(文件名)是否关闭了文件?,file-io,lua,File Io,Lua,如果循环中发生错误,通过io.lines打开文件句柄会发生什么?文档中说,当到达文件末尾时,该文件将自动关闭,对于异常情况(比如在dosomething()中接受nil值)没有说明 有人知道lua将如何处理这种情况吗?当引用它的对象最终被垃圾收集时,该文件将被关闭 如果您使用的是Unix系统,则可以使用以下程序进行尝试: local f = function() for line in io.lines("myfile.txt") do print("1")

如果循环中发生错误,通过io.lines打开文件句柄会发生什么?文档中说,当到达文件末尾时,该文件将自动关闭,对于异常情况(比如在dosomething()中接受nil值)没有说明


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

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

如果您使用的是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,它将不再打开

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()