Lua metatable 与 __index方法
来源:互联网 发布:c语言两条和 编辑:程序博客网 时间:2024/06/10 14:57
-----Begin of sample code-----
m1 = {xa = 70}
m2 = {x = 3, y = 4}
m3 = {}
z = {}
m1[z] = 99
m1.__index = function (t, k)
return 1
end
setmetatable(m3, m2)
m2.__index = m2
setmetatable(m2, m1)
print("dump m3")
print(m3.x)
print(m3.y)
print(m3.z)
--
print("dump m2")
print(m2.x)
print(m2.y)
print(m2.z)
print(m2.xa)
--
print("dump m1")
print(m1.x)
print(m1.z)
print(m1[z])
-----End of sample code-----
Outputs:
dump m3
3
4
1
dump m2
3
4
1
1
dump m1
nil
nil
99
metatable是lua中非常重要的概念,关于上面代码输出的解释:
print(m3.x) 输出 3, m3是个空表,但其元表是m2,所以在m3中找不到x这个元素时会去m2中寻找。这个寻找是通过m2的__index方法来实现的,m2.__index 是一个table,即m2,其中包含x这个元素,所以m3.x为3. 同理m3.y 为 4.
print(m3.z) 输出 1,在m2中也不存在z这个元素,那为啥m3.z 还有值呢?因为m2是有元表的,其元表是m1,所以会去查找m1的__index方法,m1.__index是一个function,返回1。这里可以看到元表的递推特性
- Lua metatable 与 __index方法
- 【lua metatable、__index __newindex是什么】
- lua元方法__index
- Lua -- __index元方法
- Lua 学习笔记——metatable和__index
- Lua:元表(metatable)与元方法(meatmethod)
- Lua:元表(metatable)与元方法(meatmethod)
- Lua:元表(metatable)与元方法(meatmethod)
- Lua中的元表(metatable)与元方法(metamethod)
- Lua:元表(metatable)与元方法(meatmethod)
- Lua:元表(metatable)与元方法(meatmethod)
- Lua:元表(metatable)与元方法(meatmethod)
- Lua 元表(metatable)与元方法(metamethod)
- Lua之__index与__newindex
- 0基础lua学习(十五)metatable和__index 实现的继承
- lua metatable
- Lua Metatable
- Metatable lua
- 简单整理(nyoj 132 && 744 && tyvj 1001 && 1141 && 1170 && 1067 && 1015)
- JBPM4基础篇02-管理流程定义
- 二分查找算法
- magento禁止LOG,写入文件和写入数据库表。
- JBPM4基础篇03-管理流程实例
- Lua metatable 与 __index方法
- POJ 1606 Jugs(BFS:找最短路径并输出)
- 如何编程实现备份数据库
- JBPM4基础篇04-设计请假流程,JBPM集成到Web Project
- 1027.欧拉回路
- OracleDBConsoleorcl服务无法启动
- 项目二-职员有薪水
- JBPM4基础篇05-设计请假流程,流程的发起,执行,驳回,监控web Demo
- Oracle 隐藏参数:_undo_autotune、一个吃力不讨好的活