Справочное руководство по языку Lua 5.1 :: 2.5.7 - Получение длины



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).

Список полей может оканчиваться разделителем, что улучшает читабельность машинно-генерируемого кода.