gpt4 book ai didi

c++ - 从 C++ 中的 table.subtable 调用 lua 函数

转载 作者:行者123 更新时间:2023-11-30 04:26:37 33 4
gpt4 key购买 nike

我正在尝试从 C++ 调用 lua 函数,其中函数位于全局表的子表中。我使用从源代码编译的 lua 版本 5.2.*。

Lua 函数

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);

但是我无法调用它,我总是得到一个错误

PANIC: unprotected error in call to Lua API (attempt to index a nil value)

第 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?

最佳答案

function 是 Lua 中的关键字,我猜你是如何设法编译代码的:

-- test.lua
globaltable = { subtable = {} }
function globaltable.subtable.function()
end

运行时:

$ lua test.lua
lua: test.lua:2: '<name>' expected near 'function'

也许您更改了此在线演示文稿的标识符,但检查第 2 行 "subtable" 是否确实存在于 globaltable 中,因为在第 3 行,顶部堆栈已经是 nil

更新:

要创建多级表,可以使用这种方法:

lua_createtable(L,0,0); // the globaltable
lua_createtable(L,0,0); // the subtable
lua_pushcfunction(L, somefunction);
lua_setfield(L, -2, "somefunction"); // set subtable.somefunction
lua_setfield(L, -2, "subtable"); // set globaltable.subtable

关于c++ - 从 C++ 中的 table.subtable 调用 lua 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11482132/

33 4 0