2015-12-15 54 views
1

如果在循環內發生了什麼不良情況,通過io.lines打開的​​文件句柄會發生什麼?該文件說,該文件將到達文件末尾時自動關閉,並沒有爲特殊情況下(類似accesing在DoSomething的()一個零值表示。錯誤發生時,io.lines(文件名)是否關閉了文件?

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

有誰知道LUA會如何處理這樣的情況

回答

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步,它贏得了'開放了。