最新要闻
- 世界即时看!知识产权保护为“中国制造”保驾护航 助力企业“走出去”
- AI生成《原子之心》冰箱姐姐:身材超火辣!-全球快看点
- 天天观热点:AMD Zen4+RDNA3加持最强掌机!ROG Ally价格泄露:性能堪比PS5
- 《王国之泪》大量实机截图:菜谱来了!还有抽奖玩法-天天快报
- 全球首批机器受精试管婴儿出生:用PS5手柄操控机器人受精
- OPPO第一季度销量登顶!用户点赞:售后非常好
- 武功县气象台发布大风蓝色预警【Ⅳ级/一般】【2023-04-27】
- 买皮肤也能“分期”了:《英雄联盟》加入点券分期付款功能
- 【世界报资讯】一次购买喝到爽!冻颜密码椰汁临期大促:9.9元/大瓶超值
- 雷军微博调研!米粉选出最喜欢的手机:小米13 Ultra排第二
- 每日消息!国产武侠《侠乂行》获支持:Intel发布4335显卡驱动
- 全球微资讯!中国空间站还能扩展:180吨级六舱合体、还可商业旅游
- 生存整个夜晚什么时候出 公测上线时间预告
- 好玩的奇迹mu手游有哪些 十大好玩的奇迹mu手游推荐
- 环球快消息!你的外卖“从天而降” 美团外卖无人机正式运行:15分钟内送达
- 环球即时看!日本又一核电站发生冷却水泄漏 电力公司回应:不会对外界有影响
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
焦点快播:lua元表、元方法
lua元表、元方法
lua官方参考手册:https://www.runoob.com/manual/lua53doc/manual.html#2.4
一、总结:
☺ 1、普通的表,找不到了,或者无法进行运算的时候,考虑设置到它身上的元表的元方法
2、元表的本质:其实元表本质上就是普通的表,它只是在功能上和别人不一样!实际上,它还是一张普通的表
3、元表的作用:定义原始值在特定操作下的行为
4、元方法:其实就是元表里的一些函数
二、元表、元方法
1、元表的使用,举例子:
- 当tb是一张表的时候,直接对它进行加法运算,会保错!
tb = {a = 1}print(tb + 1)
- 结果,会报错:attempt to perform arithmetic on a table value (global "tb")
- 解决:我们使用元表,定义一下,定义一个元方法 __add
tb = {a = 1}-- 新建一个元表(元表其实就是普通的表,只是功能和普通表不一样)mt = {-- 元表中的元方法__add__add = function(a, b)return a.a + bend}-- 给tb这张表绑定上元表,这样普通表的加法就被替换成元表的__add 方法setmetatable(tb, mt)print(tb + 1)
结果:
(相关资料图)
2
2、给普通的表设置上元表的函数 setmetatable(table, metatable)
3、元表决定了一个对象在数学运算、位运算、比较、连接、 取长度、调用、索引时的行为。
(1) 数学运算:加减乘除、取模、次方、取负、向下取整、按位与、按位或、按位异或、左移、右移
- 接下来是元表可以控制的事件的详细列表。 每个操作都用对应的事件名来区分。 每个事件的键名用加有 "
__
" 前缀的字符串来表示; 例如 "add" 操作的键名为字符串 "_add"。
__add:+ 操作。 如果任何不是数字的值做加法, Lua 就会尝试调用元方法。
比如下面的:tb 是表不是数字,不能直接做加法,lua就会去看看 tb 表是不是有设置上了元表mt,然后才会去看看元表mt中的元方法,发现是有加法__add 这个元方法的存在,然后就调用该加法元方法。
tb = {a = 1}print(tb + 1)
4、重要且特殊的元方法 __index
(1) 作用:
table[key],当table不是表或是表table中不存在key这个键时,这个事件被触发。此时,会读出table相应的元方法。
(2) 举例子:
- 当表tb中不存在索引是b的时候,tb[b] 最终会是nil
tb = {a = "hello"}print(tb[b])
- 解决:我们给tb设置上元表,然后元表定义一下,定义一个元方法 __index,这样当索引找不到的时候,就会去调用元方法
tb = {a = "hello"}--定义一个元表mt = {--定义一个元方法__index__index = function(table, key)return "hi,boy"end}-- 给tb这张表绑定上元表setmetatable(tb, mt)print(tb["b"])
- 结果:hi,boy
(3) __index 细节:这个事件的元方法,其实可以是一个函数也可以是一张表!
- 比如上面的
--定义一个元表mt = {--定义一个元方法__index__index = { a = 10, b = 5, }}
- 结果:print(tb["b"]) 返回的是 5
- 如果 print(tb["b"]) 返回的是 hello,因为在tb表就可以找到,只有找不到,才会考虑设置在它身上的元表
5、元方法 __newindex
(1) 特点:赋值时触发
一旦有了"__newindex"元方法,Lua就不再做最初的赋值操作。(如果有必要,在元方法内部可以调用rawset方法来做赋值。)
- 举例子:lua 原先的赋值方式如下:
tb = {a = "hello"}tb["b"] = 10print(tb["b"])
结果是:10
给tb表身上设置上元表,并且元表内有一个元方法 __newindex
tb = {a = "hello"}--定义一个元表mt = {--定义一个元方法__newindex__newindex = function(t, k, v) --因为————newindex 会覆盖给原来的表进行赋值的操作,即覆盖操作tb["b"] = 10end}setmetatable(tb, mt)tb["b"] = 10print(tb["b"])
- 结果是:nil【因为在表身上设置上了元表,而元表存在了__newindex 方法,原先的赋值方式,就不生效了】
- 解决:在元方法内部可以调用rawset方法来做赋值
tb = {a = "hello"}--定义一个元表mt = {--定义一个元方法__newindex__newindex = function(t, k, v)rawset(t,k,v) --发现,tb["b"] = 10 又可以正常赋值了end}setmetatable(tb, mt)tb["b"] = 10print(tb["b"])
(2) 为什么要使用rawset
- 不使用rawset,可能会导致堆栈溢出
- 使用rawset的原因:可以避免触发元方法__index
文章参考:
B站视频,作者-每日喝粥《【Lua】元表、元方法、面向对象》 https://www.bilibili.com/video/BV1f44y1a7Gk/
如果本文对你有帮助的话记得给一乐点个赞哦,感谢!
关键词:
10 如何表示虚拟内存
焦点快播:lua元表、元方法
世界即时看!知识产权保护为“中国制造”保驾护航 助力企业“走出去”
AI生成《原子之心》冰箱姐姐:身材超火辣!-全球快看点
天天观热点:AMD Zen4+RDNA3加持最强掌机!ROG Ally价格泄露:性能堪比PS5
《王国之泪》大量实机截图:菜谱来了!还有抽奖玩法-天天快报
全球首批机器受精试管婴儿出生:用PS5手柄操控机器人受精
OPPO第一季度销量登顶!用户点赞:售后非常好
武功县气象台发布大风蓝色预警【Ⅳ级/一般】【2023-04-27】
每日动态!nginx出现504错误的原因分析及解决
商品日报(4月27日):宏观面担忧加剧 原油系集体重挫|精彩看点
买皮肤也能“分期”了:《英雄联盟》加入点券分期付款功能
【世界报资讯】一次购买喝到爽!冻颜密码椰汁临期大促:9.9元/大瓶超值
雷军微博调研!米粉选出最喜欢的手机:小米13 Ultra排第二
每日消息!国产武侠《侠乂行》获支持:Intel发布4335显卡驱动
全球微资讯!中国空间站还能扩展:180吨级六舱合体、还可商业旅游
生存整个夜晚什么时候出 公测上线时间预告
全球焦点!REITs市场价格承压 长期投资价值回归
债市日报:4月27日_消息
好玩的奇迹mu手游有哪些 十大好玩的奇迹mu手游推荐
环球快消息!你的外卖“从天而降” 美团外卖无人机正式运行:15分钟内送达
环球即时看!日本又一核电站发生冷却水泄漏 电力公司回应:不会对外界有影响
专家呼吁企业增加带薪年假 称比调休更重要:5天太少
搭载卫星通信的手机盘点!它们都“捅破天”了:用一次续一升 前沿热点
焦点快报!1099元 微星推出G27C4X曲面屏:250Hz电竞高刷
当前快报:华为全屋智能重磅亮相AWE,以全空间、全场景、黑科技“打开空间之门”
led的点亮和流水灯的制作
pta第四次到第六次题目集_全球新资讯
记录-有意思的气泡 Loading 效果-世界微头条
Gitblit在Windows服务器下搭建及使用_微头条
当前观察:接单日记(二)SMTP发送邮件
今年就业形势稳中有升 前3个月城镇新增就业297万人|世界看点
高铁车票买到了吗?五一预计发送旅客1.2亿人次:远超2019|世界讯息
玩家吐槽腾讯《全境封锁2》太肝:不充钱能肝到死!|全球快看点
世界聚焦:当贝X5激光投影仪视频评测:2450CVIA高亮度够震撼 可媲美OLED电视
全球热讯:好价速囤:特仑苏纯牛奶2.9元/盒发车(商超6元)
丰田bZ4X即将“解除封印”!OTA后一天可快充4次:直接翻倍
真空休眠科技+嵌入式 海信真空璀璨503新品冰箱首发-视焦点讯
进程
Python数据类型|全球报资讯
环球热点!记一次峰回路转的注入
linux基本命令
这8个摸鱼神器,千万别让你老板知道!
童心筑梦工匠精神
五一假期未到游客已至 杭州小学生要霸占北京景点了:错峰出行_观热点
颠覆减肥界!摄入型食欲控制胶囊问世:可治疗胃肠道疾病|今日热议
便宜1万块!小米电视大师86英寸Mini LED对比索尼旗舰 画质无限接近
天天滚动:阔别20年终于回家了!旅美大熊猫“丫丫”专机已降落上海
圆形模组设计瞩目!真我11系列上架预约:超越影像旗舰
年报看复苏| 2022年上市房企减员超10万人,仍有房企薪资上涨 专家:今年情况会有所改善 世界速讯
火山引擎 DataLeap 下 Notebook 系列文章三:架构升级详解 世界热文
RPM常用命令以及组合使用场景 全球热闻
存款利率下调,提前还贷和投资黄金是好的选择吗?
【新华500】新华500指数(989001)27日收涨0.68%-通讯
2023KPL春季赛总决赛将于5月13日在杭州电竞中心举办 通讯
即时:男子考科目一作弊 竟在假发内藏“黑科技”设备
世界消息!3天内3死2伤!印度一矿工下班路上遭雷击身亡
手游也有FSR、DLSS了 高通推出骁龙GSR:游戏秒变4K、性能翻倍 世界速读
突发爆炸一死一伤!空调竟成“定时炸弹”:还能放心用吗?
世界通讯!五一假期高速公路流量将破历史峰值:预计日均超5000万辆
进击科技美次元,欧莱雅2023 BRANDSTORM中国大陆总决赛完美收官|每日播报
信息:开心档之C++ STL 教程
CutMix&Mixup详解与代码实战
ASP.NET Core MVC 从入门到精通之数据库|热点聚焦
焦点日报:web: pdf_converter | DASCTF Apr.2023 X SU战队2023开局之战
只需六步!快速开启专属的风控系统
艾迪药业艾邦德 复邦德 上市发布会盛大召开 快播报
仅重998g!LG推出Gram SuperSlim笔电:10.9mm纤薄机身
锐龙R9-7945HX游戏本实测:性能恐怖 渲染能力媲美桌面版-环球快看
国产芯片新突破!龙芯3A5000成功应用于3D打印|焦点热门
最资讯丨画二次元画首先学什么,南京二次元画哪里可以学
全球速讯:饼状图的优缺点,你真的了解吗?
高保真智能录音机解决方案技术特色解析 当前要闻
使用ethtool排查网卡速率问题 世界动态
海大集团接待AllianzGlobal等多家机构调研|全球时快讯
谷歌创始人大量抛售特斯拉股票:曾被曝马斯克绿了他 今日讯
光刻机订单占了30% ASML喊话:绝对不能失去中国市场_天天头条
.NET使用一行命令轻松生成EF Core项目框架
环球精选!【解决方法】正常游览Flash页面,解决主流游览器的不支持问题(如Edge,Firefox)
今日快讯:小米盒子怎么看电视直播_小米盒子看电视直播的方法
男子聊天界面投屏广场成大型社死现场:全网都知道他不回老婆微信了 重点聚焦
每日精选:首例涉“虚拟数字人”侵权案宣判:被告判消除影响并赔12万
每日动态!89英寸三星MICRO LED电视全球首秀:RGB无机自发光、支持音画追踪
研究所预测:2070年日本总人口将降至8700万-每日时讯
华为88W充电器A/C口二选一引争议 华为李小龙:对用户最友好的设计_快资讯
世界快报:小小善举 温暖一座城!搀扶残障人士过马路的暖心司机找到了
每日快播:CloudCanal x OceanBase 数据迁移同步优化
JS中的promise返回的resolve()和reject()的理解附代码展示
韩媒:拜登向尹锡悦推荐“零度可乐”,韩网友嘲讽“给你的也只有零”_全球热闻
苹果手机黑屏但是有声音是怎么回事?苹果手机黑屏但是有声音怎么解决?
联想k860什么时候上市的?联想k860手机参数
焦点日报:马斯克疯狂降价!特斯拉Model Y已比美国新车平均价还便宜
环球看热讯:人工智能“走出”电脑!Spot机械狗成功集成ChatGPT
国产最强骁龙8 Gen2折叠屏!vivo X Fold2明天首销:8999元起
友商被苹果干趴 华为撑起国货尊严:一季度销量暴涨41%!没5G依然强-新资讯
求职者嫌8000工资高要求降到2000:HR信以为真改标准 世界今热点
电脑k歌需要什么设备?电脑k歌软件哪个好用?
2022中国男排大名单是什么?中国男排联赛2022年赛程
麦当劳被中国买下了吗?金拱门为什么还叫麦当劳?
三星堆是哪个朝代的?三星堆文明是什么民族?