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

时间:2013-02-01 03:22:14

标签: c lua

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

注意:这实际上是它所有者question deleted的复活,我认为值得保留。

1 个答案:

答案 0 :(得分: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;
}

最初编写的代码问题是它不能正确处理null参数。例如test(1,nil,3)将返回1而不是4。