2

如何知道从 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;
}

注意:这本质上是对其所有者删除的问题的复活,我认为值得保留。

4

1 回答 1

3

所有参数都被推送到 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-01T03:23:46.030 回答