関数がグローバルテーブルのサブテーブルにある C++ から lua 関数を呼び出そうとしています。ソースからコンパイルされた lua バージョン 5.2.* を使用しています。
ルア関数
function globaltable.subtable.hello()
-- do stuff here
end
C++ コード
lua_getglobal(L, "globaltable");
lua_getfield(L, -1, "subtable");
lua_getfield(L, -1, "hello");
if(!lua_isfunction(L,-1)) return;
lua_pushnumber(L, x);
lua_pushnumber(L, y);
lua_call(L, 2, 0);
ただし、呼び出すことができません。常にエラーが発生します
パニック: Lua API の呼び出しで保護されていないエラーが発生しました (nil 値のインデックスを作成しようとしました)
3 行目: lua_getfield(L, -1, "hello");
私は何が欠けていますか?
副次的な質問: globaltable.subtable.subsubtable.hello()などのように、これよりも深い関数を呼び出す方法も知りたいです。
ありがとうございました!
これは、グローバルテーブルを作成するために使用しているものです。
int lib_id;
lua_createtable(L, 0, 0);
lib_id = lua_gettop(L);
luaL_newmetatable(L, "globaltable");
lua_setmetatable(L, lib_id);
lua_setglobal(L, "globaltable");
globaltable.subtable を作成するにはどうすればよいですか?