Lua C API:从Lua函数中检索返回C代码表的值

时间:2014-06-07 13:53:33

标签: c++ c lua

尽管努力搜索,我找不到有效的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中检索表格内容。

1 个答案:

答案 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堆栈上,因此您可以继续从表中读取更多值。