Lua(十四)——元表
发布日期:2021-06-30 19:59:03
浏览次数:2
分类:技术文章
本文共 1254 字,大约阅读时间需要 4 分钟。
一:什么是元表
元表是经过普通表扩展的表,使得扩展一些功能更加方便
在Lua中我们可以访问到表的键和值,然后对他们进行操作,但是无法对两个表直接进行操作,假如我们想直接对两个表进行相加,使用元表可以拓展功能二:设置元表
setmetatable返回值为普通表
两种设置的方法:
三:得到元表
getmetatable返回值为元表
四:元方法
元方法就是元表中的键
——__index
1.当__index对应一个函数函数参数是与元表相关联的普通表和不存在的键。当访问了一个不存在的键(索引)时,就会调用__index对应的方法这个函数默认有一个返回值,如果我们不定义这个返回值,当访问了一个不存在的键(索引)时,它默认返回nil 2.当__index对应一个表 当访问了一个不存在的键(索引)时,就会去__index对应的表中去找,如果__index对应的表中有此元素,则返回此元素的值,如果__index对应的表中也没有此元素,则返回nil
——__newindex
1.当__newindex对应一个函数函数参数是与元表相关联的普通表,新添的键和新添的值 当添加新的键值对时(不是修改原有的键和值),就会调用__newindex对应的函数 2.如果__newindex对应一个表 当添加新的键值对时(不是修改原有的键和值),就会给__newindex对应的表赋值当添加新的键值对时(不是修改原有的键和值),就会调用__newindex对应的函数,但是不会进行赋值,输出table[4]发现table[4]仍然为nil,表中并没有添加此元素
因为当程序发现我们要添加新的键值对时,就去调用__newindex对应的方法,此方法并没有添加元素到table中,所以想让元素添加到元表中,还需写一步添加元素的操作,首先想到的就是如下写法,但是发现报错,原因是key是一个不存在的键,相当于添加新的数据,所以一直在调用元方法__newindex中的tab[key]=value语句,形成了溢出 Lua提供了一个更新表中元素的内置函数:rawset
——__add
当表中元素相加时,就会调用元表中的__add方法__add对应的是一个函数,函数参数是相操作的表1和表2
——__call
当把表当作函数使用时,就会调用元表中的__call方法__call键对应的值是一个函数,函数参数是与元表相关联的普通表和函数参数(参数可以为普通类型也可以为可变参数)
——__tostring
当把表作为字符串输出时(使用print),就会调用元表中的__tostring方法__tostring键对应的值是一个函数,函数参数是与元表相关联的普通表这个函数必须有一个返回值当做字符串去输出五:__metatable键值的作用
使用__metatable可以保护元表,禁止用户访问和修改
如果元表中有__metatable的键存在则getmetatable时只会输出__metatable的值,起到了保护作用转载地址:https://liuhaowen.blog.csdn.net/article/details/89143549 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月19日 10时18分26秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
单目深度估计 monodepth2模型 代码
2019-04-30
位图索引Bitmap indexes
2019-04-30
YOLO算法(二)—— Yolov2 & yolo9000
2019-04-30
YOLO算法(三)—— Yolov3 & Yolo系列网络优缺点
2019-04-30
Python的__future__模块
2019-04-30
计算机视觉中的cost-volume的概念具体指什么(代价体积)
2019-04-30
启发函数heuristic 与 A*
2019-04-30
Image Pyramid(图像金字塔)
2019-04-30
Oracle 作业记录
2019-04-30
putty连接AWS配置(multimedia project)
2019-04-30
Hourglass Network 沙漏网络 (pose estimation姿态估计)
2019-04-30
OpenCV实战(二)——答题卡识别判卷
2019-04-30
目标检测神经网络的发展历程(52 个目标检测模型)
2019-04-30
Boundary loss 损失函数
2019-04-30
tensorflow使用tensorboard进行可视化
2019-04-30