Lua - 需要回退/错误处理
Lua - require fallback / error handling
我目前在各种 Linux 机器 运行 不同的发行版上使用 awesome
window 管理器。
所有机器都使用相同的 (lua
) 配置文件。
一些机器安装了 lua-文件系统 (lfs
),而其他机器则没有。
我的配置最好使用 lfs
,但如果未安装它,我想提供一个替代(次优)回退例程。
我的问题很简单:
- 我将如何捕获
require(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
我目前在各种 Linux 机器 运行 不同的发行版上使用 awesome
window 管理器。
所有机器都使用相同的 (lua
) 配置文件。
一些机器安装了 lua-文件系统 (lfs
),而其他机器则没有。
我的配置最好使用 lfs
,但如果未安装它,我想提供一个替代(次优)回退例程。
我的问题很简单:
- 我将如何捕获
require(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