【问题标题】:How to read Lua table return value from C++如何从 C++ 读取 Lua 表返回值
【发布时间】:2011-04-27 13:38:35
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ lua lua-table


    【解决方案1】:

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

    【讨论】:

    • lua_next() 将枚举表的所有内容,但是,如果索引已知,直接访问表可能更容易。如果索引已知,lua_gettable()lua_getfield()lua_rawget()lua_rawgeti() 都可以访问表的内容。
    • @gwell: 是的,但鉴于 OP 在他的示例中使用了lua_gettable,我认为他至少已经知道其中的一些。
    【解决方案2】:

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

    【讨论】:

    • 将表分配给全局与读取其内容并不完全相同。
    猜你喜欢
    • 2015-09-02
    • 2014-12-24
    • 2018-12-06
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多