Lua - 需要回退/错误处理

Ske*_*een 3 lua require awesome-wm luafilesystem

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

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

这是我的所有问题的简单问题:

  • 如何捕获require(lfs)语句引发的错误?

Nic*_*las 8

require不是一个神奇的功能.它就像Lua中的任何其他功能一样.它使用Lua的标准错误信令工具发出错误信号.

因此,从发现错误require 究竟喜欢你在Lua做任何其他的功能.也就是说,你把它包装成pcall:

local status, lfs = pcall(require, "lfs")
if(status) then
    --lfs exists, so use it.
end
Run Code Online (Sandbox Code Playgroud)

实际上,您可以创建自己的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
Run Code Online (Sandbox Code Playgroud)