【问题标题】:Lua one-liner to read entire file?Lua单线读取整个文件?
【发布时间】:2014-09-12 11:24:49
【问题描述】:

有没有什么技巧可以只用一行代码来破解文件?

("to slup" = 将整个文件读入字符串。)

通常我会执行以下操作:

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时)。

那么,有没有我缺少的单行解决方案?

【问题讨论】:

  • 为什么需要单线?
  • @lhf:我需要一个单行代码,因为代码要出现在一篇文章中。由于我需要在此任务上“浪费”5 行额外的行(周围还有 2 个空行),或者 catwell 解决方案的 9 行,这意味着我必须将我的代码分成两个函数,我的代码将不再简洁:-(

标签: lua slurp


【解决方案1】:

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

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

或者Penlight中有这样的功能。

【讨论】:

  • 需要一些错误处理。偷懒的方法是写f = assert(io.open(path))
  • 好吧,如果 f 为 nil,那么f:read() 无论如何都会引发错误……但是当然,应该有错误处理。 Penlight 版本做到了:github.com/stevedonovan/Penlight/blob/master/lua/pl/…
猜你喜欢
  • 2012-05-10
  • 2015-06-21
  • 2015-04-12
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
  • 2014-01-28
  • 2014-06-18
  • 2012-03-07
相关资源
最近更新 更多