将nil附加到Lua序列

时间:2015-04-19 13:57:23

标签: lua lua-table

我们说我有一个序列:

a = { 10, 12, 13 }

此序列的长度(#a)为3。

现在,假设我执行以下操作:

table.insert(a, nil)

(或a[#a+1] = nil。)

这会以任何方式影响表吗?

这个问题的答案是决定性的,还是这个"未定义的行为"?

在我检查的Luas(Lua 5.1,Lua 5.3)上,这不会影响表格。但我想知道这是否是"未定义的行为"我不能依赖它。

本手册仅讨论将nil添加到序列的中间,但它没有(根据我的解释)谈论将其添加到结束序列。

2 个答案:

答案 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