Страницы

Поиск по вопросам

пятница, 26 апреля 2019 г.

Поведение таблиц в Lua при присваивании

Я новичок в lua, и для меня не очевидно такое поведение:
local a = { name = "A", counter = 0 }
function a:say () self.counter = self.counter + 1 print(self.name..": "..self.counter) end
local b = a b.name = "B"
a:say() -- результат B: 1 -- ожидалось A: 1 a:say() -- результат B: 2 -- ожидалось A: 2 a:say() -- результат B: 3 -- ожидалось A: 3 b:say() -- результат B: 4 -- ожидалось B: 1
Как мне скопировать новый экземпляр таблицы, а не наследовать от старой?


Ответ

В луа таблицы при присваивании не копируются,a и b - cсылки на таблицу, одну и ту же. Чтоб создать новую таблицу вам надо реализовать функцию копирования и использовать ее:
function table.copy (originalTable) local copyTable = {} for k,v in pairs(originalTable) do copyTable[k] = v end return copyTable end
local b = table.copy(a)

Комментариев нет:

Отправить комментарий