使用 "#" 运算符在 Lua 中计算表的长度?

我在使用 # 计算表的长度时有一个问题。例如:

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

有人能告诉我为什么吗?

点赞
用户1009479
用户1009479

除非定义了__len元方法,否则#运算符只能用于表作为序列的情况。

序列是指对于某个非负整数n,表中的正数键集合等于{1..n}

例如:


local t = {"a", "b"}

t是一个长度为2的序列。


local t1 = {"a", nil}

等价于 local t1 = {"a"},所以t1是一个长度为1的序列。


local t1 = {nil, "a"}

t1不是一个序列,所以#t1未定义。

2015-03-25 06:52:07