我有一个从 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 循环。有没有简单的方法可以避免这种情况?我想针对输入良好的情况进行优化 - 一个整数表。
最佳答案
您正在寻找的函数不直观,名为 lua_objlen
,或在 Lua 5.2 中,lua_len
(如果您希望避免元方法调用,可以使用 lua_rawlen
)。它有很多作用(尽管有些作用,比如字符串的长度,当你只使用 lua_tolstring
来获取字符串和它的长度时并不是很有用),所以你应该熟悉它。
关于lua - 如何在c中获取lua表的表长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12617191/