当`require`无法找到所需的脚本时,如何防止lua脚本失败?

时间:2013-07-26 09:04:58

标签: lua

require无法找到所需的脚本时,是否可以防止lua脚本失败?

3 个答案:

答案 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

Demo

注意: pcall非常昂贵,不应该被积极使用。确保确实需要将require静音失败。

答案 2 :(得分:1)

您可以在加载器列表的末尾添加自己的加载器,而不是使用pcall,并使加载器永远不会失败,而是返回一个特殊值,例如字符串。然后你可以正常使用require,只需检查它的返回值。 (装载机现在称为5.2中的搜索者。)