結論
- 多層方法調用、參數傳遞,使用 table 而不是 … 來傳參會更好
過程
1、變成過程中,發現這樣寫會有問題
function SafeCallFun(func, ...)
return xpcall(function() func(...) end, function(errinfo)
-- do something
end)
end
2、報錯
lua: test.lua:2: cannot use '...' outside a vararg function near '...'
3、於是嘗試對 … 進行包裝,但是會丟失 nil 參數
-- 經過參數傳遞會丟失參數
function SafeCall1(func, ...)
-- unpack table 會丟失 nil 參數
local args = unpack({...})
return xpcall(function() func(args) end, function(errinfo)
-- do something
end)
end
4、於是把函數調用放到外面
-- 可能這樣會更好
function SafeCall2(func)
return xpcall(func, function(errinfo)
-- do something
end)
end
function SomeFunc()
local func = function()
-- do something
end
SafeCall2(func)
end