在Lua中,如何创建一个接受多个参数的C函数?

我该如何从 Lua 中知道传递给 C 函数的参数数量?

以下代码是否有效?

int test(lua_State *l) {
  int result = 0;
  int n=1;
  while(!lua_isnil(l,n)) {
    result = result + lua_tointeger(l, n);
    ++n
  }

  lua_pushnumber(l, result);
  return 1;
}

注意:这实际上是一个由其所有者删除的问题的再现,我认为这个问题值得保留。

点赞
用户221955
用户221955

所有的参数都被推入了 Lua 栈中,因此您可以通过查找栈的初始大小来获取元素的数量。执行此操作的调用为 lua_gettop(L)

因此,您的代码将大致如下:

int test(lua_State *l)
{
  int result = 0;
  int nargs = lua_gettop(l);
  for(int i=1; i<=nargs; ++i)
  {
    result += lua_tointeger(l, i);
  }

  lua_pushnumber(l, result);
  return 1;
}

代码最初的问题在于它无法正确处理空参数,例如 test(1,nil,3) 将返回 1 而不是 4。

2013-02-01 03:23:46