Функция | Назначение
--|--
table.concat(list \[, sep \[, i \[, j]]])| Возвращает строку list[i]..sep..list[i+1] ··· sep..list[j]. По умолчанию, sep -- пустая строка, i = 1 и j = #list.
table.insert(list, \[pos,] value)|Вставляет элемент value на позицию pos, сдвигая остальные элементы вверх. По умолчанию, pos = #list+1, так вызов table.insert(t,x) вставляет x в конец списка t.
table.remove(list \[, pos])|Удаляет из списка элемент на позиции pos, возвращая значение этого элемента. По умолчанию, pos = #list, так вызов table.remove(t) удаляет последний элемент списка t.
table.move(list, first, last, to \[, list2]) | Присваивает элементы таблицы с индексами от first до last включительно элементам таблицы list2 (по умолчанию той же таблицы), начиная с индекса to.
table.sort(list \[, comp])|Сортирует элементы списка на месте. Если параметр comp не передан, то используется оператор <.
table.unpack(list \[, i \[, j]])|Возвращает элементы из полученного списка. Эта функция эквивалентна ``return list[i], list[i+1], ···, list[j]``
table.pack(...)|Возвращает новую таблицу, в которой все параметры сохранены с ключами 1, 2 и т.д. и поле "n" содержит количество параметров.
ipairs(t)|Возвращает функцию-итератор, которая возвращает пару индекс и сам элемент, начиная с индекса 1, пока элементы с последовательными индексами есть в объекте.
pairs(t)|Если определен метаметод ``__pairs``, то вызывает и возвращает его результаты, иначе возвращает тройку next,t,nil.
next(t [,k])|Функция-итератор для таблицы. Возвращает следующий ключ после k и соответствующее ему значение. По умолчанию k=nil и возвращается первый ключ, или nil, если таблица пуста.
Функции pairs и ipairs можно вызывать для пользовательских данных, если определены метаметоды ``__pairs`` и ``__index``. Непонятно, почему функция next является глобальной.
Для таблицы может быть установлена метатаблица, содержащая метаметоды (аналог класса в ООП). Если в таблице метод или поле не найдены, происходит
обращение к метатаблице (прототипы в JavaScript).
Для установки метатаблицы используется функция setmetatable:
```lua
local animal={ say=function(self) print(self.sound) end } -- метатаблица (класс)
local dog={ sound="Bow-bow" }
function dog:sayn(n) -- dog.sayn=function(self,n) собственный метод
for i=1,n do self:say() end
end
setmetatable(dog,{ __index=animal }) -- dog это объект класса animal
dog:say() -- вызов метода класса через метатаблицу
dog:sayn(3) -- dog.sayn(dog,3)
```
Для строк в Lua устанавливается метатаблица string, поэтому можно писать ``string.len(s)`` или ``s:len()``.
Для таблиц метатаблица не устанавливается, так как объект в дальнейшем может быть привязан к какому-то классу, поэтому вызов функций выполняется только как ``table.insert(list,10)``. Если требуется вызов в сокращенной форме, то можно выполнить следующие операторы:
```lua
a={2,7,3}
table.next=next
table.ipairs=ipairs
table.pairs=pairs
setmetatable(a,{__index=table})
a:insert(10)
for _,v in a:pairs() do
print(v)
end
```