エラーのハンドリング
Love2Dはエラーが発生した場合、背景が水色のエラー画面が表示されます。
function love.load()
result = test("nogizaka", 46)
end
function test(a, b)
return a + b
end
実行するとエラーになります。string型のaに対して加算を行おうとしたためです。エラーの発生箇所はTracebackに表示されています。
これらの情報は開発時はデバッグの役に立ちますが、エラー処理はきちんと行う必要があります。また、リリースしたアプリケーションでこのエラー画面が出てしまうとTracebackからソースコードの構成が部分的にわかってしまうのも問題です。
pcall
エラー処理を行う場合はpcall関数を使用します。pcallはlove2D独自の関数ではなくLuaに標準で用意されています。
function love.load()
-- 第1引数: 呼び出す関数名
-- 第2引数以降: 呼び出す関数の引数
ok, result = pcall(test, "nogizaka", 46)
end
function test(a, b)
return a + b
end
function love.draw()
if not ok then
love.graphics.print(result, 10, 10)
end
end
pcallの1番目の戻り値はエラーの発生の有無です。エラーが発生していない場合、2番目の戻り値以降に呼び出した関数の戻り値が設定されます。エラーが発生した場合、2番目の戻り値にはエラーメッセージが設定されます。