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

时间:2012-09-27 08:32:18

标签: lua

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

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循环。有一种简单的方法可以避免这种情况吗?我想针对输入良好的情况进行优化 - 一个整数表。

1 个答案:

答案 0 :(得分:9)

您正在寻找的功能不直观,名为lua_objlen,或者在Lua 5.2中,lua_len(如果您希望避免元方法调用,则会有lua_rawlen)。它提供了许多角色(虽然有些角色,比如字符串的长度,当你可以使用lua_tolstring来获取字符串及其长度时,它们并不是很有用),所以你应该熟悉它。