4.2 – Cクロージャー

C関数を作成するとき、その関数にいくつかの値を関連付けて、Cクロージャーを作成できます(lua_pushcclosureを参照)。これらの値は上位値と呼ばれ、関数が呼び出されるたびにその関数からアクセスできます。

C関数が呼び出されるたびに、その上位値は特定の疑似インデックスに置かれます。これらの疑似インデックスはマクロlua_upvalueindexによって生成されます。関数に関連付けられた最初の上位値はインデックスlua_upvalueindex(1)にあり、以降も同様です。現在の関数の上位値数よりnが大きい(ただし、クロージャーの上位値最大数に1を加えた256以下)lua_upvalueindex(n)へのアクセスは、許容されるものの無効なインデックスを生成します。

Cクロージャーは、対応する上位値の値を変更することもできます。