【发布时间】:2015-04-20 00:01:16
【问题描述】:
假设我有一个序列:
a = { 10, 12, 13 }
这个序列的长度(#a)是3。
现在,假设我执行以下操作:
table.insert(a, nil)
(或a[#a+1] = nil.)
这会对表格有任何影响吗?
这个问题的答案是决定性的,还是“未定义的行为”?
在我检查过的 Lua(Lua 5.1、Lua 5.3)上,这不会影响表格。但我想知道这是否是我不能依赖的“未定义行为”。
手册只谈到将nil 添加到序列的中间,但没有(根据我的解释)谈到将其添加到结束 的序列。
【问题讨论】:
-
“将 nil 添加到序列的中间”会从表中删除键值对。如果它位于具有序列的表的序列中间,则该表将不再具有序列。
-
即使一些假设的符合实现会“影响”表而不是什么都不做,结果表仍然是定义的序列。
-
例如将 nil 分配给 last 序列键 影响 表,但之后它仍然是一个序列。