2.5.7 – Конструкторы таблиц
Конструкторы таблиц тоже относятся к выражениям. Обработка любого
встречающегося в коде конструктора ведет к созданию новой таблицы. С помощью
конструкторов можно создать как пустые,
так и частично либо полностью заполненные таблицы. Полное описание синтаксиса
конструкторов:
tableconstructor::= '{' [fieldlist] '}'
fieldlist::= field {fieldsep field} [fieldsep]
field::= '[' exp ']' '=' exp | Name '=' exp | exp
fieldsep::= ',' | ';'
Каждое поле вида [exp1] = exp2 добавляет в новую таблицу значение exp2 с ключом exp1. Поле вида name = exp эквивалентно ["name"] = exp. Поле вида exp эквивалентно [i] = exp, где i – целочисленный автоинкрементный счетчик, начинающийся с 1. Поля
в других форматах не оказывают влияния на этот счетчик. Например,
a = { [f(1)] = g; "x", "y"; x = 1, f(x), [30] = 23; 45 }
эквивалентно
do
local t = {}
t[f(1)] = g
t[1] = "x"
t[2] = "y"
t.x = 1
t[3] = f(x)
t[30] = 23
t[4] = 45
a = t
end
Если последнее поле в списке задано в форме exp, и exp
– это вызов функции или неопределенный
список параметров, то все значения, возвращаемые этим выражением,
последовательно включаются в этот список (§2.5.8). Чтобы этого
избежать, необходимо заключить вызов функции (или список неопределенных
параметров) в скобки (§2.5).
Список полей может оканчиваться разделителем, что улучшает читабельность
машинно-генерируемого кода.
|