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

发布于 2024-09-28 07:38:41 字数 246 浏览 4 评论 0原文

我有一个返回表的 Lua 函数(包含一组字符串) 使用以下代码该函数运行良好:

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

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

I have a Lua function that returns table (contains set of strings)
the function run fine using this code:

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

the function returns a table. How do I read it's contents from my C++ code?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

递刀给你 2024-10-05 07:38:41

如果您询问如何遍历结果表,则需要 lua_next (该链接还包含例子)。正如egarcia所说,如果lua_pcall返回0,则可以在堆栈顶部找到函数返回的表。

If you are asking how to traverse the resulting table, you need lua_next (the link also contains an example). As egarcia said, if lua_pcall returns 0, the table the function returned can be found on top of the stack.

少年亿悲伤 2024-10-05 07:38:41

如果函数没有抛出任何错误,那么 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)

If the function doesn't throw any errors, then lua_pcall will:

  1. Remove the parameters from the stack
  2. Push the result to the stack

This means that, if your function doesn't throw any errors, you can use lua_setfield right away - lua_pcall will work just like 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' */

would be the equivalent of:

a = funcname(someparam)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文