multidimensional-array - 对象中定义的 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
这里的问题是,由于表通过引用传递,二维数组的每个元素最终都是相同的。换句话说,当我遍历一个位置时,每个元素都有相同的行、列和索引。不确定解决此问题的最佳方法是什么?
解决方案
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
推荐阅读
- python - Pylint 无法识别 opencv 子模块
- c# - .NET 4.7.2 中使用 C# 的 AES GCM 加密
- google-analytics - gtag.js 事件跟踪 - 跟踪代码片段的位置
- android - 使用 retrofit2 和 rxjava2 对 android 应用程序进行单元测试
- reactjs - 无法在反应 js 中为按钮添加 Tippy
- robotframework - 如何计算行数并进行比较以获得通过的结果
- angular - 级联下拉填充方法在 Angular 7 中运行多个
- flutter - 如何在颤动中修复文本滚动图像
- xml - 来自 SQL 查询的休眠映射文件
- reactjs - 如何使用 React 加入状态中的多个 Apollo 查询?