为什么Lua中长度不同

3

我正在学习用于Corona SDK的Lua语言,以下是我的问题:

local type1 = {nil, "(", nil, "x" ,nil , ")" ; n=6}
local type2 = {"(",nil, "x",nil, ")",nil ; n=6}
print(#type1)   --prints 6
print(#type2)   --prints 3

为什么第二个不是6呢?
1个回答

4
# 运算符并不适用于所有的表格,它仅适用于序列,即其正数数字键的集合等于某个整数 n 的值为 {1..n}。在这种情况下,n 是它的长度。例如,local t = {"hello", 42, true} 是一个序列。
但是,如果表格中包含了 nil,则它们都不是序列。
参见 Lua 5.2 参考手册:长度操作符

@Kossel 你的意思是想要获取包括那些被初始化为 nil 的值在内的数量吗?不行,因为某个键的 nil 值等同于在该键上没有值。 - Yu Hao
1
换句话说:将 nil 赋值给一个变量,本质上等同于删除该变量的条目。 - Amber
1
@Kossel是未定义的。考虑一下这一系列输出:http://pastebin.com/Y8rqgq3k。Lua根本不会尝试错误检查一个序列是否实际上具有合理的“长度”-它只返回它所返回的内容,而由你来决定仅在对其使用有意义的东西上使用它。 - Amber
好的,这很清楚,谢谢。我用 false 替换了 nil,结果符合我的预期。 - Yichz
@user3125367 更精确地说,在5.2版本中,如果没有哈希部分,则返回数组部分的长度;否则使用二分查找:http://www.lua.org/source/5.2/ltable.c.html#unbound_search 但是无论如何,您都不应该依赖于这种行为。 - catwell
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接