當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