處理 Lua 中的錯誤

假設我們有以下功能:

function foo(tab)
  return tab.a
end -- Script execution errors out w/ a stacktrace when tab is not a table

讓我們改進一下吧

function foo(tab)
  if type(tab) ~= "table" then
    error("Argument 1 is not a table!", 2)
  end
  return tab.a
end -- This gives us more information, but script will still error out

如果我們不希望函式在出現錯誤的情況下使程式崩潰,那麼在 lua 中執行以下操作是標準的:

function foo(tab)
    if type(tab) ~= "table" then return nil, "Argument 1 is not a table!" end
    return tab.a
end -- This never crashes the program, but simply returns nil and an error message

現在我們有一個行為類似的函式,我們可以這樣做:

if foo(20) then print(foo(20)) end -- prints nothing
result, error = foo(20)
if result then print(result) else log(error) end

如果我們確實希望程式在出現問題時崩潰,我們仍然可以這樣做:

result, error = foo(20)
if not result then error(error) end

幸運的是,我們甚至不必每次都寫出這一切; lua 有一個功能正是這樣做的

result = assert(foo(20))