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