如何知道从 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 的复活。由它的主人,我认为值得保留。
最佳答案
所有参数都被推送到 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。
关于c - 如何在 lua 中创建接受多个参数的 C 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14639194/