如何从C++读取Lua表格返回值

4

我有一个Lua函数,它返回一个包含一组字符串的表格。使用以下代码可以正常运行该函数:

lua_pushstring (lua, "funcname");  
lua_gettable   (lua, LUA_GLOBALSINDEX);
lua_pushstring(lua, "someparam");
lua_pcall (lua, 1, 1, 0);

该函数返回一个表格。我该如何从我的C++代码中读取其内容?
2个回答

5
如果您想遍历生成的表格,您需要使用lua_next(链接中还包含一个示例)。如egarcia所说,如果lua_pcall返回0,则函数返回的表格可以在堆栈顶部找到。

1
lua_next() 将枚举表的所有内容,但如果已知索引,则直接访问表可能更容易。 如果已知索引,则 lua_gettable()lua_getfield()lua_rawget()lua_rawgeti() 都可以访问表的内容。 - gwell
@gwell:没错,但考虑到 OP 在示例中使用了 lua_gettable,我假设他至少已经知道其中一些。 - sbk

1

如果函数不抛出任何错误,则 lua_pcall 将会:

  1. 从堆栈中移除参数
  2. 将结果推入堆栈

这意味着,如果您的函数不抛出任何错误,您可以立即使用 lua_setfield - lua_pcall 的工作方式就像 lua_call 一样:

lua_pushstring (lua, "funcname");  
lua_gettable   (lua, LUA_GLOBALSINDEX);
lua_pushstring(lua, "someparam");
lua_pcall (lua, 1, 1, 0);
lua_setfield(L, LUA_GLOBALSINDEX, "a");        /* set global 'a' */

这将相当于:

a = funcname(someparam)

1
将表分配给全局变量并不完全等同于读取其内容。 - gwell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接