如何知道从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的复活,我认为值得保留。
答案 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。