当我使用#
来计算表格的长度时,我有一个问题。例如:
local t = {"a", "b"}
local t1 = {"a", nil}
print(#t) -- 2
print(#t1) -- 1
local t = {"a", "b"}
local t1 = {nil, "a"}
print(#t) -- 2
print(#t1) -- 2
有人可以告诉我它为什么会这样吗?
答案 0 :(得分:2)
除非定义__len
元方法,否则#
运算符只能在作为序列的表上运行。
序列是一个表,对于某些非负整数{1..n}
,其正数字键集合等于n
。
在你的例子中:
local t = {"a", "b"}
t
是一个长度为2
的序列。
local t1 = {"a", nil}
相当于local t1 = {"a"}
,因此t1
是一个长度为1
的序列。
local t1 = {nil, "a"}
t1
不是序列,因此未定义#t1
。