Lua一行代码读取整个文件?

有没有一种方法可以只用一行代码读取整个文件?

(“ slurp”=将整个文件读入字符串。)

通常我会这样做:

local f = io.open("/path/to/file")
local s = f:read("*a")
f:close()

但我想知道是否有更短的方法。

我知道我们可以在 Lua 5.2 中执行以下操作:

local s = io.lines("/path/to/file", "*a")()

但是文件会保持打开状态,直到垃圾收集器启动(并且清除io.lines返回的闭包;我相信这个闭包知道明确关闭文件,但是这只能在它的第二个调用之后发生,当它知道已经到达 EOF 时)。

那么,我是否遗漏了一行解决方案?

点赞
用户204011
用户204011

标准库中没有这样的函数,但是你可以自己定义:

local function slurp(path)
    local f = io.open(path)
    local s = f:read("*a")
    f:close()
    return s
end

或者在Penlight中有这样一个函数。

2014-07-21 21:28:30