Lua:文件关闭是强制性的吗?

und*_*ned 1 io lua fopen file fclose

假设我想将passwd内容存储在一个变量中,就像这样:

local passwd = io.open('/etc/passwd', 'r'):read('a') 
Run Code Online (Sandbox Code Playgroud)

我读完后没有关闭文件可以吗?我应该像这样重写它:

local f = io.open('/etc/passwd', 'r')
local passwd = f:read('a')
f:close()
Run Code Online (Sandbox Code Playgroud)

我知道第一段代码有效,但我没有——如果它会导致一些隐藏的问题。

我正在使用 Lua 5.3

use*_*751 5

当文件对象被垃圾收集时,Lua 将关闭文件 - 正如 Personage 在他们的回答中所说。

然而,这可能不会很快。如果您不自己关闭文件,则:

  • 如果您继续打开文件,您可能会在自动关闭之前遇到最大数量的打开文件。
  • 在某些平台上,其他进程可能无法打开文件进行写入,而您已将其打开进行读取。
  • 如果您打开一个文件进行写入,您写入的数据在文件关闭之前可能实际上不会存储在文件中。
  • 由于垃圾收集与内存使用有关,与文件无关,如果不分配太多内存,文件可能会长时间不关闭。