このページの内容

補助関数と型:ref–where

luaL_ref

[-1, +0, m]

int luaL_ref (lua_State *L, int t);

インデックスtのテーブルに、スタック最上部のオブジェクトの参照を作成して返します(そしてオブジェクトをポップします)。

参照システムはテーブルの整数キーを使います。参照は一意な整数キーです。luaL_refは返すキーの一意性を保証します。項目1は内部使用のために予約されています。luaL_refを初めて使う前に、テーブルの整数キーは正しいシーケンス(欠落なし)を構成し、項目1の値は偽、つまりシーケンスが空ならnil、それ以外ならfalseであるべきです。luaL_refを初めて使った後は、テーブルの整数キーを手動で設定してはいけません。

lua_rawgeti(L,t,r)またはlua_geti(L,t,r)を呼び出すと、参照rが参照するオブジェクトを取得できます。関数luaL_unrefは参照を解放します。

スタック最上部のオブジェクトがnilなら、luaL_refは定数LUA_REFNILを返します。定数LUA_NOREFは、luaL_refが返すすべての参照と異なることが保証されています。


luaL_Reg

typedef struct luaL_Reg {
  const char *name;
  lua_CFunction func;
} luaL_Reg;

luaL_setfuncsによって登録される関数の配列の型です。nameは関数名、funcは関数へのポインターです。すべてのluaL_Reg配列は、namefuncの両方がNULLである番兵項目で終わらなければなりません。


luaL_requiref

[-0, +1, e]

void luaL_requiref (lua_State *L, const char *modname,
                    lua_CFunction openf, int glb);

package.loaded[modname]がtrueでなければ、文字列modnameを引数として関数openfを呼び出し、その呼び出しの結果をpackage.loaded[modname]へ設定します。その関数がrequireを通じて呼び出されたかのように動作します。

glbがtrueなら、モジュールをグローバル変数modnameへも保存します。

モジュールのコピーをスタックに残します。


luaL_setfuncs

[-nup, +0, m]

void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup);

配列lluaL_Regを参照)のすべての関数を、スタック最上部(省略可能な上位値より下、次を参照)のテーブルへ登録します。

nupが0でない場合、すべての関数はnup個の上位値を持って作成されます。この上位値は、ライブラリテーブルの上に事前にプッシュされたnup個の値のコピーで初期化されます。これらの値は登録後にスタックからポップされます。

NULL値を持つ関数はプレースホルダーを表し、falseで埋められます。


luaL_setmetatable

[-0, +0, –]

void luaL_setmetatable (lua_State *L, const char *tname);

スタック最上部のオブジェクトのメタテーブルを、レジストリ内で名前tnameに関連付けられたメタテーブルへ設定します(luaL_newmetatableを参照)。


luaL_alloc

void *luaL_alloc (void *ud, void *ptr, size_t osize, size_t nsize);

C関数reallocfreeの上に構築されたLua用の標準アロケーター関数です(lua_Allocを参照)。


luaL_Stream

typedef struct luaL_Stream {
  FILE *f;
  lua_CFunction closef;
} luaL_Stream;

標準I/Oライブラリが使うファイルハンドルの標準表現です。

ファイルハンドルは、LUA_FILEHANDLEという名前のメタテーブル(LUA_FILEHANDLEは実際のメタテーブル名を持つマクロ)を持つフルユーザーデータとして実装されます。このメタテーブルはI/Oライブラリによって作成されます(luaL_newmetatableを参照)。

このユーザーデータは構造luaL_Streamで始まらなければなりません。この先頭構造の後にほかのデータを含められます。フィールドfは対応するCストリームを指すか、不完全に作成されたハンドルを示すNULLです。フィールドclosefは、ハンドルが閉じられるか収集されたとき、ストリームを閉じるために呼び出されるLua関数を指します。この関数はファイルハンドルだけを引数として受け取り、成功時には真の値を、エラー時には偽の値とエラーメッセージを返さなければなりません。Luaはこのフィールドを呼び出すと、ハンドルが閉じたことを示すため、フィールド値をNULLへ変更します。


luaL_testudata

[-0, +0, m]

void *luaL_testudata (lua_State *L, int arg, const char *tname);

この関数はluaL_checkudataと同様に動作しますが、検査に失敗したときにエラーを発生させずNULLを返します。


luaL_tolstring

[-0, +1, e]

const char *luaL_tolstring (lua_State *L, int idx, size_t *len);

指定されたインデックスの任意のLua値を、妥当な形式のC文字列へ変換します。結果の文字列はスタックへプッシュされ、関数からも返されます(§4.1.3を参照)。lenNULLでなければ、関数は*lenへ文字列の長さも設定します。

値が__tostringフィールドを持つメタテーブルを持つ場合、luaL_tolstringは値を引数として対応するメタメソッドを呼び出し、呼び出しの結果を自身の結果として使います。


luaL_traceback

[-0, +1, m]

void luaL_traceback (lua_State *L, lua_State *L1, const char *msg,
                     int level);

スタックL1のトレースバックを作成してプッシュします。msgNULLでなければ、トレースバックの先頭に追加します。引数levelは、トレースバックを開始するレベルを指定します。


luaL_typeerror

[-0, +0, v]

int luaL_typeerror (lua_State *L, int arg, const char *tname);

この関数を呼び出したC関数の引数argについて、標準メッセージを使って型エラーを発生させます。tnameは期待される型の「名前」です。この関数が返ることはありません。


luaL_typename

[-0, +0, –]

const char *luaL_typename (lua_State *L, int index);

指定されたインデックスの値の型名を返します。


luaL_unref

[-0, +0, –]

void luaL_unref (lua_State *L, int t, int ref);

参照を解放します(luaL_refを参照)。整数refLUA_NOREFLUA_REFNIL、または以前にluaL_refが返し、まだ解放されていない参照のいずれかでなければなりません。refLUA_NOREFまたはLUA_REFNILなら、この関数は何もしません。それ以外の場合、参照先のオブジェクトを収集でき、参照refluaL_refが再利用できるように、項目をテーブルから除去します。


luaL_where

[-0, +1, m]

void luaL_where (lua_State *L, int lvl);

コールスタックのレベルlvlにおける現在の制御位置を識別する文字列をスタックへプッシュします。通常、この文字列は次の形式です。

     chunkname:currentline:

レベル0は実行中の関数、レベル1は実行中の関数を呼び出した関数で、以降も同様です。

この関数はエラーメッセージの接頭辞を構築するために使われます。