我们说我有一个序列:
a = { 10, 12, 13 }
此序列的长度(#a
)为3。
现在,假设我执行以下操作:
table.insert(a, nil)
(或a[#a+1] = nil
。)
这会以任何方式影响表吗?
这个问题的答案是决定性的,还是这个"未定义的行为"?
在我检查的Luas(Lua 5.1,Lua 5.3)上,这不会影响表格。但我想知道这是否是"未定义的行为"我不能依赖它。
本手册仅讨论将nil
添加到序列的中间,但它没有(根据我的解释)谈论将其添加到结束序列。
答案 0 :(得分:5)
将nil
的值添加到序列中,完全没有效果。实际上,表格的值不能为nil
。来自the manual:
表可以是异构的;也就是说,它们可以包含所有类型的值(
nil
除外)。值nil
的任何键都不被视为表的一部分。相反,任何不属于表的键都具有关联值nil
。
因此,表{ 10, 12, 13, nil}
等同于{ 10, 12, 13 }
,两者都是序列。
同样,非序列示例:表{10, 20, nil, 40}
等同于{[1] = 10, [2] = 20, [3] = nil, [4] = 40}
或{[1] = 10, [2] = 20, [4] = 40}
答案 1 :(得分:2)
不,它不会影响桌子。
t = {1,2};
table.insert(t,nil);
table.insert(t,3);
for k,v in ipairs(t) do print(v) end
它返回:
1
2
3