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

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

最佳答案

您正在寻找的函数不直观,名为 lua_objlen ,或在 Lua 5.2 中,lua_len (如果您希望避免元方法调用,可以使用 lua_rawlen)。它有很多作用(尽管有些作用,比如字符串的长度,当你只使用 lua_tolstring 来获取字符串和它的长度时并不是很有用),所以你应该熟悉它。

关于lua - 如何在c中获取lua表的表长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12617191/

相关文章:

Lua cjson 测试 null

lua - torch 7 : Error in fine-tuning a CNN

C++ 编译器错误递归模板

python - Python list.pop() 的 lua 等价物是什么?

javascript - 一个不涉及模拟经典继承的原型(prototype)继承的例子?

Lua,表 : merge values of duplicate keys and remove duplicates

c++ - 具有 C++ 性能问题/滞后峰值的 Lua

lua - 推送可执行函数指针?

lua - 为什么 lua 5.1 会错误地解释某些整数?

random - 从列表中选择随机短语