尽管努力搜索,我找不到有效的Lua C API示例来调用返回表的Lua函数。 我是Lua和Lua C API的新手,所以不要假设太多。 但是我可以阅读并理解从C加载Lua模块并通过堆栈传递值并从C调用Lua代码的原则。但是我没有找到如何处理表返回值的任何示例。
我想要做的是调用Lua函数在表中设置一些值(字符串,整数,),我想在调用函数的C代码中得到这些值。
所以Lua函数类似于:
function f()
t = {}
t["foo"] = "hello"
t["bar"] = 123
return t
end
(我希望这是有效的Lua代码)
请您提供示例C代码,了解如何调用此代码并在C中检索表格内容。
答案 0 :(得分:10)
Lua保留一个独立于C堆栈的堆栈。
当您调用Lua函数时,它会将结果作为值返回到Lua堆栈。
对于函数,它返回一个值,因此调用该函数将返回Lua堆栈顶部的表t
。
您可以使用
调用该功能lua_getglobal(L, "f");
lua_call(L, 0, 1); // no arguments, one result
使用lua_gettable
从表中读取值。例如
lua_pushstring(L, "bar"); // now the top of the Lua stack is the string "bar"
// one below the top of the stack is the table t
lua_gettable(L, -2); // the second element from top of stack is the table;
// now the top of stack is replaced by t["bar"]
x = lua_tointeger(L,-1); // convert value on the top of the stack to a C integer
// so x should be 123 per your function
lua_pop(L, 1); // remove the value from the stack
此时表t
仍然在Lua堆栈上,因此您可以继续从表中读取更多值。