我正在尝试计算表中的元素,这些元素包含一些用字符串索引的元素。当我尝试使用#运算符时,它只会忽略字符串索引的运算符。例如:
local myTab = {1,2,3}
print(#myTab)
将返回3
local myTab = {}
myTab["hello"] = 100
print(#myTab)
将返回0 混合它们,我试过了
local myTab = {1,2,3,nil,5,nil,7}
print(#myTab)
myTab["test"] = try
print(#myTab)
返回7然后返回3,这是正确的,因为我在某处找到#操作符在找到零值时停止(但为什么第一次打印打印7?)
最后,我试过
local myT = {123,456,789}
myT["test"] = 10
print(#myT)
打印3,而不是4
为什么?
答案 0 :(得分:2)
规则很简单,来自the length operator:
除非给出
__len
元方法,否则仅在表是序列时定义表t
的长度,即,其正数字键的集合等于{{1对于一些非负整数{1..n}
。在这种情况下,n
是它的长度。
在你的例子中:
n
local myTab = {1,2,3,nil,5,nil,7}
未定义,因为#mytab
不是序列,有或没有myTab
。
myTab["test"] = try
local myT = {123,456,789}
是一个序列,长度为myT
,有或没有3