この第1版はLua 5.0向けに書かれました。以降のバージョンでも大部分は関連していますが、いくつかの相違点があります。
第4版はLua 5.3を対象にしており、Amazonやその他の書店で購入できます。
この本を購入することで、Luaプロジェクトをサポートすることもできます。
![]() |
プログラミングLua | ![]() |
パートIV. C API 第24章. C APIの概要 |
APIには、Cで表現可能なLuaの各型に対するプッシュ関数が1つあります。定数nilの場合はlua_pushnil
、数値(double
)の場合はlua_pushnumber
、ブール値(Cでは整数)の場合はlua_pushboolean
、任意の文字列(char *
)の場合はlua_pushlstring
、ゼロ終了文字列の場合はlua_pushstring
です
void lua_pushnil (lua_State *L); void lua_pushboolean (lua_State *L, int bool); void lua_pushnumber (lua_State *L, double n); void lua_pushlstring (lua_State *L, const char *s, size_t length); void lua_pushstring (lua_State *L, const char *s);C関数をプッシュしたりスタック上のユーザーデータ値をプッシュしたりする関数もあります。それらの関数については後ほど説明します。
Luaの文字列はゼロ終了文字列ではありません。その結果、任意のバイナリデータを含めることができ、明示的な長さに依存します。文字列をスタックにプッシュする公式の関数はlua_pushlstring
で、明示的な長さを引数として必要とします。ゼロ終了文字列の場合は、lua_pushstring
を使用することもできます。これはstrlen
を使用して文字列の長さを指定します。Luaは外部文字列(またはC関数以外の他のオブジェクト)へのポインタを保持しません。これは、C関数が常に静的であるためです。Luaが保持する必要がある文字列に対しては、Luaは内部コピーを作成するか、再利用します。したがって、これらの関数が返されるとすぐにバッファを解放または変更できます。
要素をスタックにプッシュするたびに、スタックにそれに対するスペースがあることを確認する責任があります。繰り返しますが、Cプログラマーです。Luaは甘やかしません。Luaが起動し、LuaがCを呼び出すときはいつでも、スタックには少なくとも20個の空きスロットがあります(この定数はlua.h
でLUA_MINSTACK
として定義されています)。これは一般的な用途の大部分には十分すぎるほどなので、通常それについて考えることさえありません。ただし、一部のタスクではより多くのスタックスペースが必要になる場合があります(たとえば、可変個引数で関数を呼び出す場合)。そのような場合には、次を呼び出すことができます。
int lua_checkstack (lua_State *L, int sz);これは、スタックに十分なスペースがあるかどうかを確認します(この詳細については後ほど説明します)。
Copyright © 2003–2004 Roberto Ierusalimschy. All rights reserved. | ![]() |