Редактирование подтаблицы внутри maintable с использованием функции внутри maintable - PullRequest
0 голосов
/ 01 апреля 2020

Можно ли редактировать содержимое таблицы, которая находится внутри другой таблицы, с помощью функции?

local MainTable = {
  subtable = {
    x = 0,
    y = 0
 }, 

 addX = function() 
  subtable.x = subtable.x + 1
 end
}

Я получаю сообщение об ошибке при попытке индексирования? (нулевое значение) Возможно ли достичь этого? Он работает вне стола, я использовал:

print(MainTable.subtable.x+1)

Почему это не работает внутри стола? Играют ли таблицы, являющиеся объектами, роль?

Спасибо!

1 Ответ

2 голосов
/ 01 апреля 2020

Lua таблицы не являются объектами; просто потому, что вы объявляете addX внутри MainTable, он не знает о чем-то еще, кроме MainTable.

Одно из решений будет:

local MainTable
MainTable = {
...
   addX = function()
      MainTable.subtable.x = MainTable.subtable.x + 1
   end
}

, но лучший способ будет

local MainTable = {
   subtable = {
      x = 0,
      y = 0
   }
}

function MainTable:addX() 
   self.subtable.x = self.subtable.x + 1
end

-- Use it as:
MainTable:addX()
...