Lua - 需要回退/错误处理

时间:2016-01-23 16:25:11

标签: lua require awesome-wm luafilesystem

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

某些机器安装了lua-filesystem(lfs),而其他机器则没有安装。 我的配置最好使用lfs,但如果没有安装,我想提供替代(次优)后备程序。

这是我的问题所有这一切的简单性:

  • 我如何抓住require(lfs)声明引发的错误?

1 个答案:

答案 0 :(得分:7)

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