当require
无法找到所需的脚本时,是否可以防止lua脚本失败?
答案 0 :(得分:6)
这是基本用法
if pcall(require, 'test') then
-- done but ...
-- In lua 5.2 you can not access to loaded module.
else
-- not found
end
但是由于Lua 5.2不推荐使用加载库时设置全局变量,所以你应该使用来自require的返回值。 并且只使用pcall,你需要:
local ok, mod = pcall(require, "test")
-- `mod` has returned value or error
-- so you can not just test `if mod then`
if not ok then mod = nil end
-- now you can test mod
if mod then
-- done
end
我喜欢这个功能
local function prequire(m)
local ok, err = pcall(require, m)
if not ok then return nil, err end
return err
end
-- usage
local mod = prequire("test")
if mod then
-- done
end
答案 1 :(得分:3)
在Lua中,错误由pcall
函数处理。你可以用它包裹require
:
local requireAllDependenciesCallback = function()
testModul = require 'test';
-- Other requires.
end;
if pcall(requireAllDependenciesCallback) then
print('included');
else
print('failed');
end
注意: pcall
非常昂贵,不应该被积极使用。确保确实需要将require
静音失败。
答案 2 :(得分:1)
您可以在加载器列表的末尾添加自己的加载器,而不是使用pcall
,并使加载器永远不会失败,而是返回一个特殊值,例如字符串。然后你可以正常使用require,只需检查它的返回值。 (装载机现在称为5.2中的搜索者。)