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