luaL_pushmodule
指定された名前のモジュールテーブルをスタックにプッシュする
c
void luaL_pushmodule(lua_State *L, const char *modname, int sizehint);説明
luaL_pushmodule は、モジュールテーブルを操作するための便利な関数で、指定された名前のモジュールテーブルをスタックにプッシュします。モジュールがまだ作成されていない場合は、新しいテーブルを作成します。
引数
L
Lua ステートへのポインタ。modname
モジュールの名前。この名前は、Lua の_LOADEDテーブルとグローバル環境でモジュールを検索または作成するために使用されます。sizehint
新しいモジュールテーブルを作成する際のサイズのヒント。モジュールが既に存在する場合、この値は無視されます。
戻り値
この関数は戻り値を持ちませんが、スタックのトップに対象のモジュールテーブルを残します。
動作
_LOADEDテーブルを取得し、その中にmodnameに対応するエントリを探します。modnameに対応する値が存在し、それがテーブルであれば、そのテーブルをスタックにプッシュします。- 値が存在しないか、テーブルでない場合:
- 新しいテーブルを作成します。
- そのテーブルを
_LOADEDに登録します。 - さらに、グローバル環境にも登録します。
- 最終的に、スタックのトップには対象のモジュールテーブルが存在します。
サンプルコード
以下は luaL_pushmodule を使用してモジュールを操作する例です。
c
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
void register_my_module(lua_State *L) {
// "mymodule" という名前のモジュールテーブルをプッシュ
luaL_pushmodule(L, "mymodule", 10);
// モジュールにフィールドを設定
lua_pushstring(L, "Hello, Lua!");
lua_setfield(L, -2, "greeting");
// スタックのクリーンアップは不要:luaL_pushmodule でトップに配置される
}
int main() {
lua_State *L = luaL_newstate();
luaL_openlibs(L);
register_my_module(L);
// Lua スクリプトからモジュールを使用する
luaL_dostring(L, "print(mymodule.greeting)"); // "Hello, Lua!" と出力
lua_close(L);
return 0;
}luaL_pushmoduleは、モジュール名mymoduleを_LOADEDおよびグローバル環境で探します。- 見つからない場合、新しいテーブルを作成し、スタックのトップに配置します。
- 作成したモジュールテーブルにフィールド
greetingを追加します。
互換性
- LuaJIT
関連項目
- luaL_findtable
- luaL_register
- lua_setfield
- lua_getfield