【问题标题】:How to call a C Function from Lua with table type argument and table type return value?如何使用表类型参数和表类型返回值从 Lua 调用 C 函数?
【发布时间】:2013-08-27 17:38:29
【问题描述】:

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

通常我们用C语言实现lua的功能,就像代码吹的那样。但是库不提供luaL_checktable和lua_pushtable,我们该怎么办?

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;
}

【问题讨论】:

标签: c lua


【解决方案1】:

使用luaL_checktype(),如果是表格,它将返回LUA_TTABLE。然后使用lua_getfield()lua_gettable()lua_rawget()从表中提取数据。

编辑:

要创建一个新表,请使用lua_newtable(),并使用lua_setfield()lua_rawset[i]() 填写内容。不要忘记将表格留在堆栈上并返回 1。

【讨论】:

  • 非常感谢。但是如何从 C 函数返回表值?
  • 非常感谢,我怎样才能将表格留在堆栈上?我应该使用 lua_settable(L,-3) 吗?
  • 您使用lua_newtable() 在堆栈上创建它,然后使用其他函数对其进行操作,然后不要弹出它。您应该计算堆栈中的元素,看看还剩下什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-29
  • 1970-01-01
相关资源
最近更新 更多