LUA Metatables
__index:当我们访问一个表中的元素不存在时,则会触发去寻找__index元方法,如果不存在,则返回nil,如果存在,则返回结果。
博主注:__index有点像异常处理的意思
__newindex: 当给你的表中不存在的值进行赋值时,lua解释器则会寻找__newindex元方法,发现存在该方法,则执行该方法进行赋值,注意,是使用rawset来进行赋值,至于原因,后面会讲到。
rawget: 是为了绕过__index而出现的,直接点,就是让__index方法的重写无效,可以理解为单纯的获取本表而不关联到父表(元表)(我这里用到"重写"二字,可能不太对,希望能得到纠正)
rawset: 设置表[索引]值,真正的值没有调用任何元方法。表必须是一个表,索引从不同的无任何值,Lua的任何值。这个函数返回表
__index
This is a very commonly used and versatile metamethod, it lets you run a custom function or use a "fallback" table if a key in a table doesn't exist. If a function is used, its first parameter will be the table that the lookup failed on, and the second parameter will be the key. If a fallback table is used, remember that it can trigger an __index metamethod on it if it has one, so you can create long chains of fallback tables. local func_example = setmetatable({}, {__index = function (t, k) -- {} an empty table, and after the comma, a custom function failsafereturn "key doesn't exist"
end})local fallback_tbl = setmetatable({ -- some keys and values present, together with a fallback failsafefoo = "bar",[123] = 456,
}, {__index=func_example})local fallback_example = setmetatable({}, {__index=fallback_tbl}) -- {} again an empty table, but this time with a fallback failsafeprint(func_example[1]) --> key doesn't exist
print(fallback_example.foo) --> bar
print(fallback_example[123]) --> 456
print(fallback_example[456]) --> key doesn't exist
http://lua-users.org/wiki/MetamethodsTutorial
转载于:https://www.cnblogs.com/jiahuafu/p/6824734.html
LUA Metatables相关推荐
- Lua 5.1 参考手册
Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes 云风 译 www.codingno ...
- 【转贴】Lua 5.0 参考手册
作者: Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes Copyright © 2003 Tecgraf, PUC ...
- Lua语言模型 与 Redis应用
Lua语言模型 与 Redis应用 标签: Java与NoSQL 从 2.6版本 起, Redis 开始支持 Lua 脚本 让开发者自己扩展 Redis. 本篇博客主要介绍了 Lua 语言不一样的设计 ...
- lua 5.3 英文手册
http://www.lua.org/manual/5.3/manual.html lua 5.3 英文手册 Lua Lua 5.3 Reference Manual by Roberto Ierus ...
- Lua注册C++类及函数
本文版权归 csdn whitehack 所有,转载请自觉标明原创作者及出处,以示尊重!! 作者:whitehack 出处:http://blog.csdn.net/whitehack/article ...
- 《Programming in Lua 3》读书笔记(十)
这一部分应该挺重要的,Lua中唯一的数据结构便是table,几乎所有的的数据操作都是在table的基础上进行.而本文提到的元表和元方法,便是帮助table实现更强大的功能而设计的. 日期:2014.7 ...
- Cocos2d-x游戏开发之Lua 5.1 参考手册
Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes 云风 译 www.codingno ...
- Lua 5.0 参考手册
Lua 5.0 参考手册 作者: Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes Copyright © 2003 ...
- Lua: 好的, 坏的, 和坑爹的
在我使用Lua编程整整9个月后, 是时候停下来反省一下这段经历了. 过去了几年里, 我使用了各式各样的语言:Perl (soaplite.com, 还有其它的项目, 包括我现在的咨询工作), C (D ...
最新文章
- 类linux系统/proc/sysrq-trigger文件功能作用
- ElementUI的el-form表单验证报错[Element Warn][Form]model is required for validate to work!
- Leetcode-53:最大子序和
- 学姐百度实习面经(轻松拿offer)
- LeetCode 646. 最长数对链(区间 贪心)
- 十分钟能学会的简单python爬虫
- 设计灵感|如何在海报设计中正确使用双色调风格?
- 面向初学者的图形数据库:为什么我们需要NoSQL数据库,ACID与BASE的解释说明
- 前端 相机 自定义取景框_索尼ZV-1数码相机:专业而易用,Vlog和网络主播的进阶良机...
- 加速失败远程计算机不能反应,2008 R2 SP1远程桌面如何开启GPU加速?不讨论虚拟机...
- GridView中添加自动编号,以及鼠标经过时行背景色变和删除时提示。
- 实践日记-webpack,入门级打包,可以实操!
- 渗透测试实验_安装Windows 2003 企业版
- 亚马逊广告基础、打法及报表分析(一)
- 病理IHC专题|免疫检查点抑制剂疗效生物标志物PD-L1
- npm install 安装包报错npm ERR! C:\Users\happl\AppData\Roaming\npm-cache_logs\2019-12-09T15_55_28_112Z-deb
- Android实现自动点击 - 无障碍服务
- 基于C#的AE二次开发之主界面设计
- 「自控元件及线路」6 无刷直流电动机
- 3.17√ 识别次读入的一个以@为结束符的字符序列是否为形如”序列1序列2“模式的字符序列 ,序列12均没有,且序列2为序列1的逆序列
热门文章
- sql privot
- 深度技术 GHOST XP SP3 快速专业装机版 v2012.07
- vim E492: Not an editor command: ^M
- 10.14.1-linux设置时间等
- matpython_[mcj]使用Matlab/Python合并mat文件并存为mat
- P1135 奇怪的电梯(BFS/DFS)
- 1736: 反射-含某个字符的子串的查找
- 阿里云携手晞司盖工业,赋能设备制造商制造+服务转型升级
- Serverless Devs 2.0 开箱测评:Serverless 开发最佳实践
- 官宣|Apache Flink 1.13.0 正式发布,流处理应用更加简单高效!