Lua 对象中定义的 2D 数组使用引用传递
2020-10-3 23:19:57
收藏:0
阅读:131
评论:1
我有以下对象:
local Game = {}
function Game:new(aNumberOfPlayers, aPlayer1, aPlayer2)
self.NumberOfPlayers = aNumberOfPlayers
self.Player1 = aPlayer1
self.Player2 = aPlayer2
self.Id = HttpService:GenerateGUID(true)
self.Status = "等待中"
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的 2D 数组
function GetInitialGamePosition()
local mt = {} -- 创建矩阵
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
问题在于,由于表通过引用传递,2D 数组的每个元素都变成了相同的。换句话说,当我遍历 Position 时,每个元素具有相同的行、列和索引。不确定克服这个问题的最佳方法是什么?
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

## 将下面翻译成中文并且保留原本的 markdown 格式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
```lua function Square:new(x, y, index, color) -- 新建一个变量o的表 local o = {} -- 设置表中的元素 o.X = x o.Y = y o.Index = index o.Color = color -- 将元表设置为self setmetatable(o, self) -- 定义 __index 元方法,以便在该表中找不到属性时可以从self中查找 self.__index = self -- 返回新建的表 return o end该函数为 Lua 语言中的构造函数,用于创建一个名为 Square 的表对象。在该函数中,使用
local定义一个局部变量o,并使用{}创建这个表。接下来,我们向o中添加了四个属性分别为X、Y、Index和Color,并分别将传入的四个参数赋给它们。之后,使用setmetatable(o, self)把o的元表设置为self,然后在元表中定义元方法__index,以便在该表中找不到属性时可以从self中查找该属性。最后,返回新创建的o表对象。