Страницы

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

суббота, 4 января 2020 г.

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

#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


Как мне скопировать новый экземпляр таблицы, а не наследовать от старой?
    


Ответы

Ответ 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)

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

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