我目前awesome
在运行不同发行版的各种 Linux 机器上使用窗口管理器。所有机器都使用相同的 ( lua
) 配置文件。
有些机器安装了 lua-filesystem ( lfs
),而有些则没有。我的配置最好使用lfs
,但如果没有安装,我想提供一个替代(次优)后备例程。
这是我的问题,很简单:
- 我将如何去捕捉
require(lfs)
语句抛出的错误?
我目前awesome
在运行不同发行版的各种 Linux 机器上使用窗口管理器。所有机器都使用相同的 ( lua
) 配置文件。
有些机器安装了 lua-filesystem ( lfs
),而有些则没有。我的配置最好使用lfs
,但如果没有安装,我想提供一个替代(次优)后备例程。
这是我的问题,很简单:
require(lfs)
语句抛出的错误?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