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

尽管我已经努力搜索,但仍无法找到一个有效的 Lua C API 示例,用于调用返回表格的 Lua 函数。我是 Lua 和 Lua C API 的新手,所以请不要假定我知道太多。我可以阅读并理解从 C 加载 Lua 模块的原理,以及通过堆栈传递值并从 C 调用 Lua 代码的原理。但是,我没有找到如何处理表返回值的示例。我的目标是调用一个 Lua 函数,在表格中设置一些值(字符串、整数等),并在调用函数的 C 代码中获取这些值。因此,Lua 函数应该是这样的:(*我希望这是有效的 Lua 代码)

  t = {}
  t["foo"] = "hello"
  t["bar"] = 123
  return t
end

您能否提供如何调用此函数并在 C 语言中检索表格内容的示例 C 代码。

点赞
用户33252
用户33252

Lua 保留了一个与 C 栈分开的栈。

当调用 Lua 函数时,它会将返回值作为值存入 Lua 栈中。

对于你的函数,它返回一个值,因此调用函数将返回 Lua 栈顶的表 t

你可以这样调用这个函数:

lua_getglobal(L, "f");
lua_call(L, 0, 1);     // 没有参数,一个结果

使用 lua_gettable 从表中读取值。例如:

lua_pushstring(L, "bar");  // 现在 Lua 栈顶是字符串 "bar"
                           // 栈顶下面一个元素是表 t
lua_gettable(L, -2);       // 第二个元素是表 t;
                           // 现在栈顶被替换为 t["bar"]
x = lua_tointeger(L,-1);   // 将栈顶的值转换为 C 整数
                           // 所以根据你的函数,x 应该是 123
lua_pop(L, 1);             // 从栈中移除该值

此时表 t 仍然在 Lua 栈中,因此可以继续从表中读取更多的值。

2014-06-07 18:22:50