访问可变键时的元方法
2016-10-15 20:23:25
收藏:0
阅读:59
评论:3
__index 在以不可变方式访问时调用:
local foo = bar["foo"];
在以可变方式访问不存在的索引时调用 __newindex :
local bar = { }
bar["foo"] = 123 -- 调用 __newindex
bar["foo"] = 456 -- 不调用 __newindex
是否有一种元方法可以在每次以可变方式访问键时调用,即不仅在键尚不存在时才调用?
我想创建一种行为,使得当用户设置表中的键时,无论该键是否已存在,它都调用本机方法。
点赞
用户2546626
在 Lua 中不存在不可变性,你指的只是索引的存取和赋值。Lua 5.3 中表示...
当表不是一个表或者键不在表中时,就会发生这种情况。
...这两种情况都是如此。
你最好的选择是将值存储在另一个表或子表中。
2016-03-10 11:39:58
用户107090
标准的方法是使用代理表,即一个空的表具有适当的元方法来访问实际的表。由于代理为空,每次获取或设置其中的字段时都会调用元方法。
2016-03-10 12:34:46
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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中获取用户配置主目录的跨平台方法
我相当确定你所要求的元方法并不存在。但你可以尝试通过某些方法达到你的目标。
例如,你可以尝试这样使用
__call元方法:local mt = {} function mt.__call(tbl, key, val) -- 每当你使用 bar(key, val) 时都会调用这个函数 tbl[key] = val end local bar = setmetatable({}, mt) bar("foo", 123) bar("foo", 456) print(bar.foo)或者你可以尝试使用其它函数的方式来实现此效果。