如何在 Lua 类中覆盖元表的 __tostring?
2019-7-29 16:19:21
收藏:0
阅读:77
评论:1
我有这个类:
math.randomseed(os.time())
local Die = {}
function Die.new(side)
if side ~= 4 or side ~= 6 or side ~= 8 or side ~= 10 or side ~= 12 or side ~= 10 or side ~= 100 then
side = 6
end
ran = math.random(side) -- 需要先获取值,再放入表中
local self = { numSides = side, currentSide = ran}
local getValue = function(self)
return self.currentSide
end
local roll = function(self)
self.currentSide = math.random(self.numSides)
end
local __tostring = function(self)
return "Die[面数: "..self.numSides..", 当前值: "..self.currentSide.."]"
end
return {
numSides = self.numSides,
currentSide = self.currentSide,
getValue = getValue,
roll = roll,
__tostring = __tostring
}
end
return Die
我的目标是当我使用 print(dieOne) 这行代码时,能够输出数据。目前,我的 __tostring 并不起作用,但是我很确定我是在错误的路径上。
如何实现我的目标?谢谢!
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

Die.new返回的每个实例的元表中必须存在__tostring。目前,你只是将其存储为普通条目。以下是确保它正确保存在每个关联元表中的方法:function Die.new(side) -- 以前的代码... -- 设置元表 local mt = { __tostring = __tostring } return setmetatable({ numSides = self.numSides, currentSide = self.currentSide, getValue = getValue, roll = roll, }, mt) end在这里,我们利用了
setmetatable不仅可以完成其名称所示的功能,还可以返回第一个函数参数的事实。请注意,并不需要将函数本身命名为
__tostring。只有元表键必须是"__tostring"。