4.3 – レジストリ

Luaはレジストリを提供します。これは、必要なLua値を保存するために任意のCコードが使える、事前定義されたテーブルです。レジストリテーブルには常に疑似インデックスLUA_REGISTRYINDEXでアクセスできます。どのCライブラリもこのテーブルへデータを保存できますが、衝突を避けるため、ほかのライブラリが使うものとは異なるキーを選ぶ必要があります。一般的には、ライブラリ名を含む文字列、コード内のCオブジェクトのアドレスを持つライトユーザーデータ、またはコードで作成した任意のLuaオブジェクトをキーとして使います。変数名と同様に、アンダースコアに続いて大文字で始まる文字列キーはLua用に予約されています。

レジストリの整数キーは、いくつかの事前定義された値とともに参照機構(luaL_refを参照)によって使われます。したがって、レジストリの整数キーをほかの目的に使ってはいけません。

新しいLuaステートを作成すると、そのレジストリにはいくつかの事前定義された値が含まれています。これらの値には、lua.hで定数として定義された整数キーによってインデックスが付けられています。次の定数が定義されています。

  • LUA_RIDX_MAINTHREAD:このインデックスに、レジストリはステートのメインスレッドを保持します。(メインスレッドはステートとともに作成されたスレッドです。)
  • LUA_RIDX_GLOBALS:このインデックスに、レジストリはグローバル環境を保持します。