Luaプログラミング(初版)この初版はLua 5.0向けに執筆されましたが、後のバージョンと大きな違いはありません。
第4版ではLua 5.3を対象に対応しており、Amazonやその他の書店で購入できます。
この本を購入するとLuaプロジェクトを支援することができます。
![]() |
LuaでのプログラミングLua | ![]() |
第4章 C API 第24章 C APIの概要 |
通常、アプリケーションコードは保護されていない状態で実行されます。アプリケーションコードはLuaによって呼び出されないので、Luaはエラー(つまり、setjmp
を呼び出せない)をキャッチするための適切なコンテキストを設定できません。そのような環境では、Luaで「メモリ不足」などのエラーが発生すると、Luaにはできることがあまりありません。Luaはパニック関数を呼び出し、関数が戻るとアプリケーションを終了します。(lua_atpanic
関数を使用して、独自のパニック関数を設定できます。)
すべてのAPI関数が例外をスローするわけではありません。lua_open
、lua_close
、lua_pcall
、lua_load
関数はすべて安全です。さらに、他の関数のほとんどは、メモリ割り当ての失敗の場合にのみ例外をスローできます。たとえば、luaL_loadfile
は、ファイル名のコピーのためのメモリが十分でない場合に失敗します。メモリが不足しても何もしないプログラムがいくつかあるので、これらの例外を無視する可能性があります。そのようなプログラムでは、Luaでメモリが不足した場合でもパニックになることはありません。
メモリ割り当ての失敗の場合でもアプリケーションを終了させたくない場合は、protected mode
でコードを実行する必要があります。通常、ほとんど(またはすべて)のLuaコードはlua_pcall
の呼び出しを介して実行されるため、保護モードで実行されます。lua_pcall
は、メモリ割り当ての失敗の場合でもエラーコードを返し、インタープリタを整合した状態に保ちます。Luaとやり取りするすべてのCコードも保護したい場合は、lua_cpcall
を使用できます。(この関数の詳細についてはリファレンスマニュアルを参照してください。Luaディストリビューションのlua.c
ファイルで使用方法の例を参照してください。)
著作権 © 2003–2004 Roberto Ierusalimschy。すべての権利を留保します。 | ![]() |