4.3 レジストリ
Lua はレジストリ (registry) を提供します。レジストリは C コードから利用できるテーブルであり、任意の Lua の値を保存できます。レジストリテーブルには疑似インデックス LUA_REGISTRYINDEX
を使っていつでもアクセスできます。任意の C ライブラリは好きなデータをこのテーブルに保存できますが、衝突を避けるために他のライブラリが使わないキーを使う必要があります。そのためキーとしてはライブラリの名前が付いた文字列、ライブラリが持つ C オブジェクトを指すライトユーザーデータ、あるいはライブラリで作成した Lua オブジェクトが推奨されます。変数の名前と同様に、アンダースコアの後に大文字が続くキーは Lua のために予約されています。
レジストリの整数キーは参照 (luaL_ref
) で利用され、その他にも事前に定義された値を持ちます。そのため、これら以外の用途でレジストリの整数キーを使ってはいけません。
新しく作られる Lua ステートのレジストリには最初からいくつかのフィールドが定義されています。最初から定義されるフィールドのキーは lua.h
で定義される整数であり、その意味は次の通りです:
LUA_RIDX_MAINTHREAD
: ステートのメインスレッド (ステートと共に作られたスレッド) を指すインデックス。LUA_RIDX_GLOBALS
: グローバル環境を指すインデックス。