Особенности работы с таблицами

<< Click to Display Table of Contents >>

Navigation:  Modbus Universal MasterOPC Server > Руководство по языку Lua 5.1 > Библиотеки функций > Обработка таблиц >

Особенности работы с таблицами

Переменные типа table не содержат самих данных, в них хранятся только ссылки на соответствующий объект. Поэтому присваивание, передача параметров и возврат результата из функции оперируют только ссылками на значения, эти операции никогда не ведут к созданию копий.

Пример:

local a={20,30,40}; --создаем таблицу a

local b={}; --создаем таблицу b

b=a; --присваиваем таблице b таблицу a

table.insert(b,40); --вставляем элемент в таблицу b

--значение 40 вставилось в таблицу a

Несмотря на то, что была создана таблица b число 40 будет добавлено в исходную таблицу a, так как при операции присваивания переменной b была присвоена ссылка на таблицу a.

Другой пример. Вызов функции с передачей ему таблицы:

function F(array)

table.insert(array,40); --insert element to table array

return;

end;

 

--call function

local a={20,30,40}; --создаем таблицу a

F(a); --вызываем функцию

--значение 40 вставилось в таблицу a

Несмотря на то, что в функции ведется работа с таблицей array, добавление элемента 40 приведет к его добавлению в таблицу a, основного кода.

Аналогично происходит и с другими операциями в таблицах - удалении, сортировки, замены значений конкретных позиций.

Если требуется сделать копию таблицы, то это можно сделать выполнив следующий код:

local a={20,30,40}; --исходная таблица

local b={}; --новая таблица (будущая копия)

for i=1,table.maxn(a),1 do

b[i]=a[i]; --в цикле делаем добавление новых элементов в таблицу b

end;

--теперь таблица b независима от таблицы a, и изменения в ней не будут влиять на таблицу a