Lua Table Constructor 中的初始化顺序

所以,一个表构造器有两个组成部分,类似列表和类似记录。类似列表的条目总是优先于类似记录的条目吗?我的意思是,考虑以下情况:

a = {[1]=1, [2]=2, 3}
print(a[1]) -- 3
a = {1, [2]=2, [1]=3}
print(a[1]) -- 1

索引1始终与第一个类似列表的条目相关联,2与第二个相关联,等等吗?还是有其他东西?

点赞
用户3979429
用户3979429

Lua 中有两种类型的表,数组字典,这些被称为“列表”和“记录”。一个 数组 按顺序包含值,这使你有一些优势,比如更快的迭代或插入/删除值。字典 就像一个巨大的查找表,它没有顺序,它的优势在于你可以使用任何值作为键,并且没有太多限制。

当你构造一个表时,有两种语法,你可以用逗号分隔值,例如 {2,4,6,8},从而创建一个 _数组_,它的键从1到n,或者你可以定义键值对,例如 {[1]=2,[58]=4,[368]=6,[48983]=8},创建一个 _字典_,你可以经常混合这些语法,你不会遇到任何问题,但是你的 场景下情况不一样。

你正在定义表的初始构造中重复的键。这是最常见的不切实际的情况,因此在语言开发过程中没有真正思考过这个问题。这意味着发生的实际上是未指定的行为。不完全了解这会产生什么影响,并且可能在不同的平台或实现之间不一致。

因此,你不应该在任何商业项目或与其他人分享的任何代码中使用它。当你不确定时,构造一个空表,之后再定义键值对。

2017-02-15 23:39:18