3

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

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

这是我的问题,很简单:

  • 我将如何去捕捉require(lfs)语句抛出的错误?
4

1 回答 1

11

require不是一个神奇的功能。它和 Lua 中的其他函数一样。它使用 Lua 的标准错误信号设施来发出错误信号。

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

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

Indeed, you can make your own prequire function that works for loading anything:

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
于 2016-01-23T16:30:59.483 回答