[隨筆] passing vararg to xpcall

[隨筆] passing vararg to xpcall

結論


  • 多層方法調用、參數傳遞,使用 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

參考:
passing vararg to xpcall? [Author:petite.abeille]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章