7

我有从 lua 调用的 ac 函数。第一个参数是一个表格。该表被滥用为底层 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 循环。有没有一种简单的方法可以避免这种情况?我想针对输入良好的情况进行优化 - 一个整数表。

4

1 回答 1

12

您正在寻找的函数是不直观的 named lua_objlen,或者在 Lua 5.2 中,lua_lenlua_rawlen如果您希望避免元方法调用,有一个)。它有很多作用(虽然有些作用,比如字符串的长度,在你可以用来获取字符串及其长度时并不是很有用lua_tolstring),所以你应该熟悉它。

于 2012-09-27T08:47:40.507 回答