调用两个表中的函数会得到相同的输出
2020-11-19 13:48:40
收藏:0
阅读:114
评论:1
我最近尝试了Lua的Pseudo OOP机制。我想在两个表中调用一个函数,该函数将一个值写入它们各自的表中。我尝试使用self变量。这是我的代码:
local Table = {}
Table.value = 0;
function Table:myfunc(Parameter)
self.value = Parameter;
end
local Table1 = Table;
local Table2 = Table;
Table1:myfunc("1");
Table2:myfunc("2");
print(Table1.value)
print(Table2.value)
问题是,它两次都打印2。如果我在函数内打印参数,那么它显示的是1和2,正是我想要的。 那我做错了什么呢?
(如果我在错误的地方写这篇文章,对不起,这是我第一次发帖:))
任何帮助都将不胜感激。
问候
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

表并非不可变的,这意味着它们总是按引用传递。
Table1和Table2都引用了表Table。此代码所做的与以下代码相同:
Table:myfunc("1") Table:myfunc("2")为了解决这个问题,您需要将每个表作为单独的实例。要在它们上使用
myfunc,您需要将此函数复制到每个实例中,或者创建一个元表以所有实例,然后将myfunc放在其中。解决方案1:
local Table1 = {value = 0, myfunc = myfunc} --每个实例都必须设置此函数 local Table2 = {value = 0, myfunc = myfunc} Table1:myfunc("1") Table2:myfunc("2") print(Table1.value, Table2.value) -- 1 2解决方案2:
local Meta = {myfunc = myfunc} -- 创建元表 Meta.__index == Meta -- 在索引事件(在 tbl.var 或 tbl[var] 上)使用 "Meta" 表 local Table1 = {value = 0} local Table2 = {value = 0} setmetatable(Table1, Meta) -- 为实例设置元表 setmetatable(Table2, Meta) Table1:myfunc("1") Table2:myfunc("2") print(Table1.value, Table2.value) -- 1 2当您索引不存在的键时,元表的 __index 将被使用,就像是后备处理的情况。
该问题在 Lua PIL book 中得到了解释和元表的未来解释: https://www.lua.org/pil/16.html。