この第 1 版は Lua 5.0 用に書かれました。後のバージョンとの関連性は依然として高いものの、いくつかの違いがあります。
第 4 版では Lua 5.3 を対象としており、Amazon やその他の書店で購入できます。
書籍を購入することにより、Lua プロジェクトをサポートすることもできます。


27.3 - C 関数への状態の格納

多くの場合、C 関数は呼び出しよりも永続する非ローカルデータ、つまりデータを保持する必要があります。C では一般的に、これにはグローバルまたは静的変数が使用されます。ただし、Lua 用のライブラリ関数をプログラムする場合、グローバル変数や静的変数は適切なアプローチではありません。まず、汎用 Lua 値は C 変数に格納できません。次に、このような変数を使用するライブラリは複数の Lua ステートで使用できません。

別の方法として、このような値を Lua のグローバル変数に格納する方法があります。この方法では前の 2 つの問題が解決します。Lua のグローバル変数はあらゆる Lua 値を格納し、それぞれ個別のステートにはグローバル変数の個別のセットがあります。ただし、Lua コードでこれらのグローバル変数を改ざんし、C データの整合性を損なう可能性があるため、これは常に満足できる解決策ではありません。この問題を回避するために、Lua ではレジストリと呼ばれる独立したテーブルを提供しています。これは C コードでは自由に使用できますが、Lua コードではアクセスできません。