このページの内容

C APIの関数と型:pop–pushvfstring

lua_pop

[-n, +0, e]

void lua_pop (lua_State *L, int n);

スタックからn個の要素をポップします。lua_settopを使うマクロとして実装されています。


lua_pushboolean

[-0, +1, –]

void lua_pushboolean (lua_State *L, int b);

bを持つブール値をスタックへプッシュします。


lua_pushcclosure

[-n, +1, m]

void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n);

新しいCクロージャーをスタックへプッシュします。この関数はC関数へのポインターを受け取り、呼び出されると対応するC関数を実行する、型functionのLua値をスタックへプッシュします。引数nは、この関数が持つ上位値の数を示します(§4.2を参照)。

Luaから呼び出し可能なすべての関数は、引数を受け取り結果を返すための正しいプロトコルに従う必要があります(lua_CFunctionを参照)。

C関数を作成するとき、上位値と呼ばれるいくつかの値を関連付けられます。関数が呼び出されるたびに、その関数はこれらの上位値へアクセスできます。この関連付けをCクロージャーと呼びます(§4.2を参照)。Cクロージャーを作成するには、最初に上位値の初期値をスタックへプッシュする必要があります。(複数の上位値がある場合、最初の値を最初にプッシュします。)次にlua_pushcclosureを呼び出し、関数に関連付ける値の数を引数nで指定して、C関数を作成しスタックへプッシュします。lua_pushcclosureはこれらの値もスタックからポップします。

nの最大値は255です。

nが0の場合、この関数はC関数へのポインターにすぎないライトC関数を作成します。この場合、メモリエラーを発生させることはありません。


lua_pushcfunction

[-0, +1, –]

void lua_pushcfunction (lua_State *L, lua_CFunction f);

C関数をスタックへプッシュします。この関数は上位値なしのlua_pushcclosureと等価です。


lua_pushexternalstring

[-0, +1, m]

const char *lua_pushexternalstring (lua_State *L,
                const char *s, size_t len, lua_Alloc falloc, void *ud);

外部文字列、つまりLuaが管理しないメモリを使う文字列を作成します。ポインターsは文字列内容を保持する外部バッファーを指し、lenは文字列の長さです。文字列の末尾にはゼロが必要です。つまり条件s[len] == '\0'を満たす必要があります。Luaのすべての文字列と同様、長さはLua整数に収まらなければなりません。

fallocNULLでなければ、外部バッファーが不要になったときにLuaがその関数を呼び出します。この呼び出しまでバッファーの内容を変更してはいけません。関数は、指定されたud、ブロックとしての文字列s、以前のサイズとして長さに1(末尾のゼロ用)を加えた値、新しいサイズとして0を指定して呼び出されます。

外部バッファーを使う場合でも、Luaは文字列のヘッダーを割り当てる必要があります。メモリ割り当てエラーの場合、Luaはエラーを発生させる前にfallocを呼び出します。

関数は文字列へのポインター(つまりs)を返します。


lua_pushfstring

[-0, +1, v]

const char *lua_pushfstring (lua_State *L, const char *fmt, ...);

整形した文字列をスタックへプッシュし、その文字列へのポインターを返します(§4.1.3を参照)。結果は、各変換指定子を対応する追加引数の文字列表現へ置き換えたfmtのコピーです。変換指定子(と対応する追加引数)には、‘%%’(文字’%’を挿入)、‘%s’(サイズ制限なしのゼロ終端文字列を挿入)、‘%f’(lua_Numberを挿入)、‘%I’(lua_Integerを挿入)、‘%p’(voidポインターを挿入)、‘%d’(intを挿入)、‘%c’(intを1バイト文字として挿入)、‘%U’(unsigned longをUTF-8バイト列として挿入)を指定できます。

文字列fmt内の’%’のすべての出現は、有効な変換指定子を構成しなければなりません。

メモリ割り当てエラーに加え、結果の文字列が大きすぎる場合、この関数はエラーを発生させる可能性があります。


lua_pushglobaltable

[-0, +1, –]

void lua_pushglobaltable (lua_State *L);

グローバル環境をスタックへプッシュします。


lua_pushinteger

[-0, +1, –]

void lua_pushinteger (lua_State *L, lua_Integer n);

nを持つ整数をスタックへプッシュします。


lua_pushlightuserdata

[-0, +1, –]

void lua_pushlightuserdata (lua_State *L, void *p);

ライトユーザーデータをスタックへプッシュします。

ユーザーデータはLua内でCの値を表します。ライトユーザーデータはポインター、void*を表します。これは数値のような値です。作成するものではなく、個別のメタテーブルを持たず、(作成されたものではないため)収集されません。ライトユーザーデータは、同じCアドレスを持つ「任意の」ライトユーザーデータと等しくなります。


lua_pushliteral

[-0, +1, v]

const char *lua_pushliteral (lua_State *L, const char *s);

このマクロはlua_pushstringと等価ですが、sがリテラル文字列の場合にのみ使うべきです。(Luaはこの場合を最適化することがあります。)


lua_pushlstring

[-0, +1, v]

const char *lua_pushlstring (lua_State *L, const char *s, size_t len);

sが指すサイズlenの文字列をスタックへプッシュします。Luaは指定された文字列の内部コピーを作成または再利用するため、関数が返った直後にsのメモリを解放または再利用できます。文字列には、埋め込まれたゼロを含む任意のバイナリデータを含められます。

文字列の内部コピーへのポインターを返します(§4.1.3を参照)。

メモリ割り当てエラーに加え、文字列が大きすぎる場合、この関数はエラーを発生させる可能性があります。


lua_pushnil

[-0, +1, –]

void lua_pushnil (lua_State *L);

nil値をスタックへプッシュします。


lua_pushnumber

[-0, +1, –]

void lua_pushnumber (lua_State *L, lua_Number n);

nを持つ浮動小数点数をスタックへプッシュします。


lua_pushstring

[-0, +1, m]

const char *lua_pushstring (lua_State *L, const char *s);

sが指すゼロ終端文字列をスタックへプッシュします。Luaは指定された文字列の内部コピーを作成または再利用するため、関数が返った直後にsのメモリを解放または再利用できます。

文字列の内部コピーへのポインターを返します(§4.1.3を参照)。

sNULLなら、nilをプッシュしてNULLを返します。


lua_pushthread

[-0, +1, –]

int lua_pushthread (lua_State *L);

Lが表すスレッドをスタックへプッシュします。このスレッドがそのステートのメインスレッドなら1を返します。


lua_pushvalue

[-0, +1, –]

void lua_pushvalue (lua_State *L, int index);

指定されたインデックスの要素のコピーをスタックへプッシュします。


lua_pushvfstring

[-0, +1, –]

const char *lua_pushvfstring (lua_State *L,
                              const char *fmt,
                              va_list argp);

可変数の引数ではなくva_listを受け取り、エラーを発生させない点を除き、lua_pushfstringと等価です。代わりに、エラーの場合はエラーメッセージをプッシュし、NULLを返します。