Lua - 需要回退/错误处理

Lua - require fallback / error handling

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

一些机器安装了 lua-文件系统 (lfs),而其他机器则没有。 我的配置最好使用 lfs,但如果未安装它,我想提供一个替代(次优)回退例程。

我的问题很简单:

require 不是一个神奇的功能。它与 Lua 中的任何其他函数一样。它使用 Lua.

的标准错误信号工具发出错误信号

因此,您可以像在 Lua 中执行任何其他功能一样从 require 准确地 捕获错误。即,您将其包装在 pcall:

local status, lfs = pcall(require, "lfs")
if(status) then
    --lfs exists, so use it.
end

事实上,您可以创建自己的 prequire 函数来加载任何内容:

function prequire(...)
    local status, lib = pcall(require, ...)
    if(status) then return lib end
    --Library failed to load, so perhaps return `nil` or something?
    return nil
end

local lfs = prequire("lfs")

if(lfs) then
    --use lfs.
end