当require
无法找到所需的脚本时,是否可以防止lua脚本失败?如何防止lua脚本在`require`找不到所需脚本时失败?
3
A
回答
3
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它已被弃用设置全局变量时加载库从需要你应该使用返回的值。 而只有使用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
而不是使用pcall
,你在加载器列表的末尾添加可以在自己的装载机,并让这个你的loader不会失败,而是返回一个特殊的值,比如一个字符串。然后,您可以正常使用require并只检查其返回值。 (装载机现在在5.2中称为搜索者。)
+0
但这是影响到所有模块,这可能是一个很大的惊喜,即'需要'返回无效值。 – moteus
相关问题
- 1. 如何终止Lua脚本?
- 2. 脚本失败找不到命令
- 3. Android NDK:ndk构建脚本失败 - 脚本“check-cygwin-make.mk”找不到
- 4. 防止多次执行Lua脚本
- 5. Python - 脚本失败时撤消脚本
- 6. 如何通过一个单一的LUA脚本运行多个Lua脚本即使一个脚本失败
- 7. Lua脚本失败的相对路径
- 8. 如何防止脚本
- 9. 如何防止@require缓存外部js脚本
- 10. 停止ant脚本不失败生成
- 11. 防止PHP脚本
- 12. 如何防止这个Lua脚本被反复发送?
- 13. 如何防止脚本停止
- 14. 防止需要JS缓存Nodejs上所需的脚本
- 15. FTP脚本失败
- 16. Liquibase脚本失败
- 17. PowerShell脚本失败
- 18. 运行Matlab代码失败时,如何停止Perl脚本?
- 19. 如何防止脚本在另一个脚本工作时工作
- 20. 如何防止多个加载PHP脚本调用JS脚本?
- 21. 如何防止脚本读取其他脚本
- 22. 如何运行.lua脚本?
- 23. 如何运行Lua脚本?
- 24. 在Android上使用LuaJ在Lua脚本中需要其他lua脚本
- 25. 如何发送在脚本中找不到脚本dir的脚本中的msg?
- 26. Lua Wireshark脚本
- 27. 复制所有值VBA脚本失败
- 28. 如何防止用户分享脚本?
- 29. 如何防止无响应的脚本?
- 30. signal.alarm防止脚本执行
感谢PLB,这是有效的。当你说它不应该被主动使用时,纯粹是从性能角度还是其他问题? – MarkNS
@ MarkNuttall-Smith仅限演出。如果你决定为此使用'pcall'。我会建议创建一些函数来处理所有需要避免太多'pcall's。例如:'local requireFiles = function() - 在这里需要。结束;'并将其传递给'pcall'。 – Leri
实际上我并不关心性能,因为它只是在应用程序启动期间,我会这样做。我希望能够在用户特定的目录或共享位置中找到依赖关系。再次感谢。 – MarkNS