在维护表中使用维护表内的函数来编辑子表

使用一个内部函数来编辑另一个表中的表格内容是可能的吗?

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

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

我收到了尝试索引 ? (nil 值) 的错误。 这可行吗? 在表外它可以工作,我使用了以下代码:

print(MainTable.subtable.x+1)

为什么不在表内起作用呢?是因为表是对象吗?

谢谢!

点赞
用户4984564
用户4984564

Lua表不是对象;即使您在MainTable内声明了“addX”,它也不知道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()
2020-04-01 06:11:38