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

时间:2010-10-19 15:32:47

标签: c++ lua lua-table

我有一个返回表的Lua函数(包含一组字符串) 使用此代码运行正常的函数:

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

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

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

如果函数没有抛出任何错误,那么lua_pcall将:

  1. 从堆栈中删除参数
  2. 将结果推送到堆栈
  3. 这意味着,如果您的函数没有抛出任何错误,您可以立即使用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)