Lua - require 回退/错误处理

我目前在不同的 Linux 机器上使用 awesome 窗口管理器,运行不同的发行版。所有机器都使用相同的(lua)配置文件。

其中一些机器安装了 lua-filesystem (lfs),而其他机器没有。我的配置最好使用 lfs,但如果未安装,则希望提供一种不太理想的替代方案。

这是我简单的问题:

  • 我该如何捕获 require(lfs) 语句抛出的错误?
点赞
用户734069
用户734069

require 并非神奇函数。在 Lua 中它仅仅是一个普通函数,并且使用 Lua 的标准错误信号处理机制来表示错误。

因此,你要像处理其他 Lua 函数一样处理 require 的错误。即,将其包装在 pcall 中:

local status, lfs = pcall(require, "lfs")
if(status) then
    --lfs 存在,所以可以使用它。
end

事实上,你可以自己编写 prequire 函数来加载任何东西:

function prequire(...)
    local status, lib = pcall(require, ...)
    if(status) then return lib end
    --Library 加载失败,因此也许可以返回 `nil` 或其他什么?
    return nil
end

local lfs = prequire("lfs")

if(lfs) then
    --使用 lfs。
end
2016-01-23 16:30:59