この初版はLua 5.0向けに書かれたものです。後続バージョンでもまだ大部分が関連していますが、いくつかの相違点があります。
第4版はLua 5.3をターゲットとしており、Amazonやその他の書店で購入できます。
この本を購入することによって、Luaプロジェクトをサポートすることもできます。
![]() |
プログラミングインLua | ![]() |
第4部 C API 第27章 C関数のライティング手法 |
レジストリーでキーとして数値を使用しないでください。これは参照システムに予約されているからです。このシステムは補助ライブラリ内に2、3の関数によって構成されており、一意の名前を作成する方法について心配することなくレジストリーに値を格納することができます。(実際、これらの関数は任意のテーブル上で動作できますが、通常はレジストリーでに使用されます。)
呼び出しは
int r = luaL_ref(L, LUA_REGISTRYINDEX);スタックから値をポップし、新しい整数キーを使用してレジストリーに格納し、そのキーを返します。このキーを参照と呼びます。
名前のとおり、参照は主にC構造体内でLua値への参照を保存する必要がある場合に使用します。すでに確認したように、それらを取得したC関数の外部でLua文字列へのポインターを保存しないでください。さらに、Luaは他のオブジェクト(テーブルや関数など)へのポインターさえも提供しません。つまり、ポインターを使用してLuaオブジェクトを参照することはできません。代わりに、そのようなポインターが必要な場合は、参照を作成してCに保存します。
参照r
に関連付けられた値をスタックにプッシュするには、次のように記述します。
lua_rawgeti(L, LUA_REGISTRYINDEX, r);最後に、値と参照の両方を解放するには、次のように呼び出します。
luaL_unref(L, LUA_REGISTRYINDEX, r);この呼び出しの後、
luaL_ref
はr
の値を新しい参照として再び返す場合があります。参照システムはnilを特殊なケースとして扱います。luaL_ref
をnil値に対して呼び出すと、新しい参照は作成せず、代わりに定数参照LUA_REFNIL
を返します。呼び出しは
luaL_unref(L, LUA_REGISTRYINDEX, LUA_REFNIL);何の影響もありませんが
lua_rawgeti(L, LUA_REGISTRYINDEX, LUA_REFNIL);予想どおりnilをプッシュします。
参照システムは定数LUA_NOREF
も定義します。これは有効な参照とは異なる整数です。これは参照が無効であるとしてマークすることに役立ちます。LUA_REFNIL
の場合と同様、LUA_NOREF
を取得しようとしてもnilが返り、解放しようとしても影響はありません。
Copyright © 2003–2004 Roberto Ierusalimschy. All rights reserved. | ![]() |