3.4.9 - 表的构造
表构造即创建表的表达式。每当构造语句生效,都会创建一个新表。构造语句可以用来创建空表或创建并初始化一个表。构造语句的通用语法为:
tableconstructor ::= ‘{’ [fieldlist] ‘}’
fieldlist ::= field {fieldsep field} [fieldsep]
field ::= ‘[’ exp ‘]’ ‘=’ exp | Name ‘=’ exp | exp
fieldsep ::= ‘,’ | ‘;’
其中,以 [exp1] = exp2 这种形式表示的属性部分会使得新表中新增一个键为exp1、键值为exp2的字段。以name = exp形式表示的属性部分等效于["name"] = exp表示。exp 形式的属性部分等效于形式 [i] = exp ,这里的i为从1开始的连续整数;其他形式中的属性表示不影响其计数。例如:
lua
a = { [f(1)] = g; "x", "y"; x = 1, f(x), [30] = 23; 45 }
等效于:
lua
do
local t = {}
t[f(1)] = g
t[1] = "x" -- 第一个exp
t[2] = "y" -- 第二个exp
t.x = 1 -- t["x"] = 1
t[3] = f(x) -- 第三个exp
t[30] = 23
t[4] = 45 -- 第四个exp
a = t
end
关于构造语句中的赋值顺序则是未定义的。(这里指对于重复的键而言的顺序。)
如果构造列表中的最后一个属性是exp形式且是个多值复合表达式,那么其产生的所有值则依次进入到构造列表中。(参见3.4.12)
构造列表的属性间的分隔符后缀是可选可,以方便生成机器码。