この初版は 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. | ![]() |