【发布时间】:2019-08-23 17:45:38
【问题描述】:
我想知道如何从 Lua C API 中的函数获取多个返回值。
Lua 代码:
function test(a, b)
return a, b -- I would like to get these values in C++
end
C++ 代码:(调用函数的部分)
/* push functions and arguments */
lua_getglobal(L, "test"); /* function to be called */
lua_pushnumber(L, 3); /* push 1st argument */
lua_pushnumber(L, 4); /* push 2nd argument */
/* call the function in Lua (2 arguments, 2 return) */
if (lua_pcall(L, 2, 2, 0) != 0)
{
printf(L, "error: %s\n", lua_tostring(L, -1));
return;
}
int ret1 = lua_tonumber(L, -1);
int ret2 = lua_tonumber(L, -1);
printf(L, "returned: %d %d\n", ret1, ret2);
我得到的结果:
返回:4 4
我期望的结果:
返回:3 4
【问题讨论】:
-
int ret1 = lua_tonumber(L, -1);应该是int ret1 = lua_tonumber(L, -2); -
lua_tonumber 不会从堆栈中弹出值...我不检查但我很确定。所以也许 lua_tonumber(L,-2) 和 lua_tonumber(L,-1) 应该可以解决问题
-
注意:除了问题之外,在堆栈上,您已经获得了该函数为该特定调用为您提供的任何结果。您必须根据需要使用number of results 来清理堆栈,无论如何处理它们。