OO Lua - 如何停止访问基类表?
2020-8-29 10:52:50
收藏:0
阅读:114
评论:1
尝试在Lua中构建国际象棋时,遇到了棋子的问题。我有一个基础的“Piece”类,然后为每个棋子继承Piece类的类。我遇到了覆盖基类表的问题。创建一个对象后,当创建另一个对象时,它会覆盖表中的字段。
我的基类:
Piece = {
killed = false,
white = false,
pieceName = nil
}
function Piece:new(white)
local returnObject = {
killed = false,
white = false,
pieceName = nil
}
setmetatable(returnObject, self)
self.__index = self
self.white = white
return returnObject
end
function Piece:isWhite()
return (self.white == true)
end
function Piece:setWhite(white)
self.white = white
end
function Piece:isKilled()
return (self.killed == true)
end
function Piece:setKilled(killed)
self.killed = killed
end
function Piece:getName()
return self.pieceName
end
function Piece:setName(name)
self.pieceName = name
end
例如,车的类:
require "Piece"
Rook = Piece:new()
function Rook:canMove(board, startSpot, endSpot)
if endSpot:getPiece():isWhite() == self.isWhite() then
return false
end
end
最后,我尝试在这些子类中的棋盘上调用new(它是包含一些棋子的2D Spot(即瓷砖)的2D表):
function Board:resetBoard()
self.boxes[1][1] = Spot:new(1, 1, Rook:new(true))
self.boxes[1][1]:getPiece():setName("Rook")
self.boxes[1][5] = Spot:new(1, 5, King:new(true))
self.boxes[1][5]:getPiece():setName("King")
...
end
我从打印棋盘得到的输出是:
King 0 0 0 King 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
我尝试了一些混乱的解决方法,但无法使任何事情正常工作。我觉得问题在于setName调用self.pieceName,但我不确定如何以这种方式设置一个setter。虽然这只是一个猜测,但可能是其他原因。
有什么想法吗?请随时提出更多信息。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

已解决此问题,还需要使“Spot”也是唯一的。 我之前没有提到过“Spot”类,现在已更改代码如下:
Spot = { x = nil, y = nil, piece = nil } Spot.__index = Spot function Spot:new(x, y, piece) local returnObject = {} setmetatable(returnObject, self) returnObject.x = x returnObject.y = y returnObject:setPiece(piece) return returnObject end