__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相关推荐

  1. Lua 5.1 参考手册

    Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes 云风 译 www.codingno ...

  2. 【转贴】Lua 5.0 参考手册

    作者: Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes Copyright © 2003 Tecgraf, PUC ...

  3. Lua语言模型 与 Redis应用

    Lua语言模型 与 Redis应用 标签: Java与NoSQL 从 2.6版本 起, Redis 开始支持 Lua 脚本 让开发者自己扩展 Redis. 本篇博客主要介绍了 Lua 语言不一样的设计 ...

  4. lua 5.3 英文手册

    http://www.lua.org/manual/5.3/manual.html lua 5.3 英文手册 Lua Lua 5.3 Reference Manual by Roberto Ierus ...

  5. Lua注册C++类及函数

    本文版权归 csdn whitehack 所有,转载请自觉标明原创作者及出处,以示尊重!! 作者:whitehack 出处:http://blog.csdn.net/whitehack/article ...

  6. 《Programming in Lua 3》读书笔记(十)

    这一部分应该挺重要的,Lua中唯一的数据结构便是table,几乎所有的的数据操作都是在table的基础上进行.而本文提到的元表和元方法,便是帮助table实现更强大的功能而设计的. 日期:2014.7 ...

  7. Cocos2d-x游戏开发之Lua 5.1 参考手册

    Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes 云风 译 www.codingno ...

  8. Lua 5.0 参考手册

    Lua 5.0 参考手册 作者: Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes Copyright © 2003 ...

  9. Lua: 好的, 坏的, 和坑爹的

    在我使用Lua编程整整9个月后, 是时候停下来反省一下这段经历了. 过去了几年里, 我使用了各式各样的语言:Perl (soaplite.com, 还有其它的项目, 包括我现在的咨询工作), C (D ...

最新文章

  1. 类linux系统/proc/sysrq-trigger文件功能作用
  2. ElementUI的el-form表单验证报错[Element Warn][Form]model is required for validate to work!
  3. Leetcode-53:最大子序和
  4. 学姐百度实习面经(轻松拿offer)
  5. LeetCode 646. 最长数对链(区间 贪心)
  6. 十分钟能学会的简单python爬虫
  7. 设计灵感|如何在海报设计中正确使用双色调风格?
  8. 面向初学者的图形数据库:为什么我们需要NoSQL数据库,ACID与BASE的解释说明
  9. 前端 相机 自定义取景框_索尼ZV-1数码相机:专业而易用,Vlog和网络主播的进阶良机...
  10. 加速失败远程计算机不能反应,2008 R2 SP1远程桌面如何开启GPU加速?不讨论虚拟机...
  11. GridView中添加自动编号,以及鼠标经过时行背景色变和删除时提示。
  12. 实践日记-webpack,入门级打包,可以实操!
  13. 渗透测试实验_安装Windows 2003 企业版
  14. 亚马逊广告基础、打法及报表分析(一)
  15. 病理IHC专题|免疫检查点抑制剂疗效生物标志物PD-L1
  16. npm install 安装包报错npm ERR! C:\Users\happl\AppData\Roaming\npm-cache_logs\2019-12-09T15_55_28_112Z-deb
  17. Android实现自动点击 - 无障碍服务
  18. 基于C#的AE二次开发之主界面设计
  19. 「自控元件及线路」6 无刷直流电动机
  20. 3.17√ 识别次读入的一个以@为结束符的字符序列是否为形如”序列1序列2“模式的字符序列 ,序列12均没有,且序列2为序列1的逆序列

热门文章

  1. sql privot
  2. 深度技术 GHOST XP SP3 快速专业装机版 v2012.07
  3. vim E492: Not an editor command: ^M
  4. 10.14.1-linux设置时间等
  5. matpython_[mcj]使用Matlab/Python合并mat文件并存为mat
  6. P1135 奇怪的电梯(BFS/DFS)
  7. 1736: 反射-含某个字符的子串的查找
  8. 阿里云携手晞司盖工业,赋能设备制造商制造+服务转型升级
  9. Serverless Devs 2.0 开箱测评:Serverless 开发最佳实践
  10. 官宣|Apache Flink 1.13.0 正式发布,流处理应用更加简单高效!