如何知道从 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;
}
注意:这本质上是对其所有者删除的问题的复活,我认为值得保留。
所有参数都被推送到 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。