如何获取c中lua表的表长度?


How do I get the table length of a lua table in c?

我有一个从lua调用的c函数。第一个参数是一个表。该表被用作基础api的数字输入数组。所以现在我的代码看起来像这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
int n = 0;
lua_pushnil ( L );
while ( lua_next ( L, 2 ) ) {
   n++;
   lua_pop ( L, 1 );
}
int *flat = alloca ( n * 4 );
lua_pushnil ( L );
int i = 0;
while ( lua_next(L,2) ) {
   flat[i++] = (int)lua_tonumber( L, -1 );
   lua_pop ( L, 1 );
}

我盲目键入了代码,请原谅错误。也没有错误检查。但是问题是我必须两次执行while循环。有避免这种情况的简便方法吗?我想针对输入良好的情况进行优化-一个整数表。


您要查找的函数是不直观的名为lua_objlen,或者在Lua 5.2中为lua_len(如果希望避免元方法调用,则为lua_rawlen)。它起着许多作用(尽管有些作用,例如字符串的长度,当您仅可以使用lua_tolstring来获取字符串及其长度时不是很有用),因此您应该熟悉它。