Lua 对象中定义的二维数组使用引用传递

Lua 2d array defined in object uses pass by reference

我有以下对象:

local Game = {}
function Game:new(aNumberOfPlayers, aPlayer1, aPlayer2)
    self.NumberOfPlayers = aNumberOfPlayers
    self.Player1 = aPlayer1
    self.Player2 = aPlayer2
    self.Id = HttpService:GenerateGUID(true)
    self.Status = "Waiting"
    self.Moves = {}
    self.Position = GetInitialGamePosition()
    return self
end

local Square = {}
function Square:new(x, y, index, color)
    self.X = x
    self.Y = y
    self.Index = index
    self.Color = color
    return self
end

使用以下函数为位置初始化二维数组

function GetInitialGamePosition()
    local mt = {}   -- create the matrix
    for i=1,15 do
        mt[i] = {}
        for j=1,15 do
            mt[i][j] = Square:new(i,j,GetIndexFromRowColumn(i,j),nil)
        end
    end
    return mt
end

这里的问题是,由于表通过引用传递,因此二维数组的每个元素最终都是相同的。换句话说,当我遍历一个 Position 时,每个元素都有相同的行、列和索引。不确定解决此问题的最佳方法是什么?

function Square:new(x, y, index, color)
    local o = {}
    o.X = x
    o.Y = y
    o.Index = index
    o.Color = color
    setmetatable(o, self)
    self.__index = self
    return o
end