4.2 C クロージャ
新しく作成される C 関数には Lua の値を結び付けることができます。そうして作成されるのは C クロージャ (C closure) であり、C クロージャに結び付く値をアップバリュー (upvalue) と呼びます。アップバリューは関数が呼ばれたときいつでもアクセス可能です。
C 関数が呼ばれるとき、アップバリューは特定の疑似インデックスに保存されます。この疑似インデックスは lua_upvalueindex
マクロで取得でき、例えば関数に結び付いた一つ目のアップバリューを取得するには lua_upvalueindex(1)
として呼び出します。関数が持つアップバリューの個数より大きい n
に対する lua_upvalueindex(n)
は処理可能な有効でないインデックスを返します (ただし n
はクロージャが持てるアップバリューの最大値 256 より大きくてはいけません)。
C クロージャはアップバリューの値を変えることもできます。