首页 > 解决方案 > 对象中定义的 Lua 2d 数组使用按引用传递

问题描述

我有以下对象:

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

它使用以下函数来初始化 Position 的二维数组

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

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

标签: multidimensional-arrayluapass-by-reference

解决方案


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

推荐阅读