将nil追加到Lua序列中。

假设我有一个序列:

a = { 10, 12, 13 }

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

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

table.insert(a, nil)

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

这会对表格产生影响吗?

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

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

手册只谈论在序列的中间添加nil,但它没有(根据我的理解)谈论在序列的末尾添加它。

点赞
用户1009479
用户1009479

将值 nil 添加到一个序列中不会有任何影响。事实上,一个 table 不能存储值为 nil 的元素。来自官方文档的解释:

Tables can be heterogeneous; that is, they can contain values of all types (except nil). Any key with value nil is not considered part of the table. Conversely, any key that is not part of a table has an associated value nil.

因此,一个包含 { 10, 12, 13, nil} 的 table 等同于 { 10, 12, 13 },两者都是序列。

同样地,举个非序列的例子:一个包含 {10, 20, nil, 40} 的 table 等同于{[1] = 10, [2] = 20, [3] = nil, [4] = 40}{[1] = 10, [2] = 20, [4] = 40}

2015-04-19 15:16:49
用户3828934
用户3828934

不会影响表格。

t = {1,2};
table.insert(t,nil);
table.insert(t,3);
for k,v in ipairs(t) do print(v) end

输出结果为:

1
2
3
2015-04-19 15:18:21