如何使用lua_rawlen函数工作

我正在尝试使用lua_rawlen获取表的长度,代码如下

lua_createtable(L, 0, 0);

lua_pushstring(L, "k0");
lua_pushstring(L, "v0");
lua_settable(L, -3);
lua_pushstring(L, "k1");
lua_pushstring(L, "v1");
lua_settable(L, -3);

printf("%d\n", lua_rawlen(L, -1));

输出为0,看起来应该是2,出了什么问题?感谢任何建议。

点赞
用户1008957
用户1008957

函数 lua_rawlen 返回一个 序列 的长度,而不会调用可选的元方法 __len。它相当于 Lua 函数 rawlen,当没有此类 __len 元方法时,它与 运算符相同。

您的表不是一个序列,因为您只放置了字符串键。序列的键必须是从 1 开始的连续整数。尝试使用 12 作为相应的键,而不是 "k0""k1"

示例:

lua_createtable(L, 0, 0);

lua_pushstring(L, "v0");
lua_rawseti(L, -2, 1);
lua_pushstring(L, "v1");
lua_rawseti(L, -2, 2);

printf("%d\n", lua_rawlen(L, -1));
2012-10-23 09:55:11