Я новичок в 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)
Комментариев нет:
Отправить комментарий