我如何在 C 语言中获取 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循环。有没有一种简单的方法来避免这种情况?我希望针对输入是好的 - 一张整数表格进行优化。

点赞
用户734069
用户734069

你需要的函数在 Lua 5.1 中被称为lua_objlen,在 Lua 5.2 中被称为lua_len(如果你想避免元方法调用,还可以使用lua_rawlen)。它有许多作用(尽管一些作用,例如字符串的长度,在你可以使用lua_tolstring获取字符串及其长度的情况下并不是很有用),因此你应该熟悉它。

2012-09-27 08:47:40