4.2 C クロージャ

新しく作成される C 関数には Lua の値を結び付けることができます。そうして作成されるのは C クロージャ (C closure) であり、C クロージャに結び付く値をアップバリュー (upvalue) と呼びます。アップバリューは関数が呼ばれたときいつでもアクセス可能です。

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

C クロージャはアップバリューの値を変えることもできます。