无法理解 Lua 表的继承。
2015-5-8 16:56:9
收藏:0
阅读:75
评论:2
希望有人可以理解我正在尝试解决的问题,只是似乎不太了解 Lua 就能做到这一点。
--[[
tbl.a.test("moo") returns "Table A moo appears"
tbl.b.test("moo") returns "moo appears"
]]
tbl = {
a = { ID = "Table A" },
b = {
test = function(...) print(... .. " appears") end,
},
}
tbl.a__index = function(self, ...) tbl.b[self](tbl.a.ID .. ...) end
我正在尝试的是,我可以创建几个表格 a,c,d,e,并不必将 test 复制到每个表格中。当使用 tbl.a.test,tbl.c.test,tbl.d.test 时,它将检索 tbl.a.ID 变量,然后调用 tbl.b.test(ID,"moo")。
到目前为止,我发现除了 tbl.b 之外,它无法在其他任何内容中找到 .test。
\*\* 编辑 ** 感谢目前为止的支持,代码现在是;
tbl = {
a = { ID = "Table A " },
b = { test = function(...) local id, rest = ... print(id .. ": " .. rest) end },
}
setmetatable(tbl.a, {__index=function(self, k, ...) local rest = ... return tbl.b[k](tbl.a.ID, rest) end})
但是,由于某种奇怪的原因,... 没有被推进去:|
点赞
用户3735873
[子]类的创建
Lua中类和对象之间的区别只是理论上的,实际上它们的实现方式完全相同。
每当需要进行继承时,您都可以使用我的通用newclass()函数来创建新的类/对象,或从现有类/对象中继承。
您想要传递的任何公共代码和数据都应放入'prototype'表中(每种情况都可以为其命名)。
此外,在调用方法时,您似乎忘记使用方法调用语法(使用冒号而不是句点)。如果没有它,Self参数将不会被自动识别。
2015-05-08 23:20:36
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
tbl.a和__index之间缺少了一个句点。__index需要在a的元表中,而不是在表本身中。__index函数没有返回任何东西。__index函数中的self是被索引的表,而不是键(也就是第二个参数)。应该这样写:
setmetatable(tbl.a, {__index=function(self, k) return tbl.b[k](tbl.a.ID) end})