如何使用表类型参数和表类型返回值从Lua调用C函数?

如何使用表类型参数和表类型返回值从Lua调用C函数?,c,lua,C,Lua,我想用C语言实现一个函数,这个函数应该用一个表参数调用,它应该返回一个表类型值 通常我们用C为lua实现函数,就像代码blow一样。但是库没有提供luaL_检查表和lua_推送表,我们能做什么 static int average(lua_State *L) { int n = lua_gettop(L); double sum = 0; int i; for (i = 1; i <= n; i++) { sum += lu

我想用C语言实现一个函数,这个函数应该用一个表参数调用,它应该返回一个表类型值

通常我们用C为lua实现函数,就像代码blow一样。但是库没有提供luaL_检查表和lua_推送表,我们能做什么

static int average(lua_State *L)
{
    int n = lua_gettop(L);
    double sum = 0;
    int i;

    for (i = 1; i <= n; i++)
    {
            sum += lua_tonumber(L, i);
    }


    lua_pushnumber(L, sum / n);
    lua_pushnumber(L, sum);

    return 2;
}
静态整数平均值(lua_State*L)
{
int n=lua_gettop(L);
双和=0;
int i;
对于(i=1;i使用
LUA\u checktype()
,如果是表,它将返回
LUA\u TTABLE
。然后使用
LUA\u getfield()
LUA\u gettable()
从表中提取数据

编辑:


要创建新表,请使用
lua\u newtable()
并使用
lua\u setfield()
lua\u rawset[i]()
。别忘了将表留在堆栈上并返回1。

非常感谢。但是我如何从C函数返回表值?非常感谢,我如何将表留在堆栈上?我应该使用lua_settable(L,-3)吗?您可以使用
lua_newtable()在堆栈上创建它
,然后使用其他函数对其进行操作,然后不要弹出它。您应该计算堆栈上的元素数,以查看剩余的元素。