You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅在文件存在时加载Lua模块,不存在则回退至{}

Lua 模块不存在时优雅回退到空表的正确实现

你原来的写法失效的核心原因是:Lua的require函数在找不到指定模块时会直接抛出运行时错误,而非返回nil,因此or {}这部分回退代码根本无法执行,导致重命名bar.lua后程序崩溃。

正确实现方式

使用Lua的pcall(保护调用)来包裹require,捕获模块加载失败的异常,从而实现优雅回退:

-- 执行require并捕获结果
local ok, module_result = pcall(require, "foo.bar")
-- 加载成功则用模块返回值,失败则用空表
local baz = ok and module_result or {}

代码解释

  • pcall会安全执行传入的函数(此处为require):
    • 若模块存在且加载成功,返回true和模块的返回值(即bar.lua里的表);
    • 若模块不存在或加载出错,返回false和错误信息。
  • 通过ok and module_result or {}的逻辑判断,实现加载成功用模块内容,失败则回退到空表的需求。

完整示例

修改后的main.lua:

local ok, module_result = pcall(require, "foo.bar")
local baz = ok and module_result or {}
print(baz)
-- 模块存在时输出:{ example = true }
-- 模块不存在时输出:{}

内容的提问来源于stack exchange,提问作者sloppy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 00:43:10