この初版は Lua 5.0 向けに書かれました。今後のバージョンに依然として関連性は大きいものの、相違点があります。
第 4 版は Lua 5.3 をターゲットにしており、Amazon やその他の書店でお買い求めいただけます。
ご著書を購入いただくことは、Lua project をサポートすることにもなります。
![]() |
Lua でのプログラムLua | ![]() |
| 第 1 部.言語 第 8 章 コンパイル、実行、エラー |
多くのアプリケーションでは、Lua でエラー処理を行う必要はありません。通常、アプリケーションプログラムがこの処理を行います。すべての Lua のアクティビティは、通常 Lua にチャンクを実行するよう要求するアプリケーションによる呼び出しから開始されます。エラーがある場合、この呼び出しはエラーコードを返し、アプリケーションは適切な処置を講じることがでいます。スタンドアローンのインタープリターの場合、メインループは単にエラーメッセージを表示してプロンプト表示とコマンド実行を続行するだけです。
Lua でエラーを処理する必要がある場合は、pcall(保護呼び出し)関数を使用してコードをカプセル化する必要があります。
Lua コードの一部を実行して、そのコードの実行中に発生したエラーをキャッチしたいとします。まずは、そのコード部分を関数にカプセル化します。ここでは foo と呼びましょう。
function foo ()
...
if unexpected_condition then error() end
...
print(a[i]) -- potential error: `a' may not be a table
...
end
次に、pcall を使用して foo を呼び出します。 if pcall(foo) then
-- no errors while running `foo'
...
else
-- `foo' raised an error: take appropriate actions
...
end
言うまでもなく、匿名関数を使って pcall を呼び出すこともできます。 if pcall(function () ... end) then ...
else ...
pcall 関数は最初の引数を保護モードで呼び出すため、関数が実行中に発生するエラーをキャッチします。エラーがなければ、pcall は true を返すとともに、呼び出しによって返された値を返します。それ以外の場合は、false とともにエラーメッセージを返します。
エラーメッセージは、名前から想像できるように文字列であるわけではありません。error に渡す Lua の値は、pcall によって返されます。
local status, err = pcall(function () error({code=121}) end)
print(err.code) --> 121
これらのメカニズムは、Lua で例外処理を実行するために必要なすべてを提供します。error を使用して例外をスロー(投げ)し、pcall を使用してそれをキャッチします。エラーメッセージは、エラーの種類を特定します。| Copyright © 2003-2004 Roberto Ierusalimschy. All rights reserved. | ![]() |