lua元表(metatable)

Posted 宋萌萌萌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua元表(metatable)相关的知识,希望对你有一定的参考价值。

相信你对 lua table已经十分熟悉了,元表是一个普通的table,普通到你可以像操作其他表一样随意的读写表中的数据。然而它又是特殊的,特殊到你可以利用它给表添加算术运算操作,不知道这些骚操作有没有勾起你一丝学习的欲望呢?


  • 元表的价值是如何体现的?

如果需要拿更高级的语言来理解lua,我们可以讲 元表就是lua语言的类,就像类定义了对象的行为一样,元表定义了以该表为元表的所有lua表的行为,也就是说lua元表中包含的k-v子表中都访问得到,不管这些k对应的是函数还是其他任何类型的数据。


lua提供 setmetatable(tab, mt)全局函数将mt设置为tab的元表,提供 getmetatable(tab)全局函数获取tab的元表。
--- 【code】 1-1
--- 定义表mt,mt中包含一个test方法和一个name变量local mt = { name = "元表"}function mt:test() print("this is a test function")end
--- 定义一个tab,内容为空local tab = {}
--- 让mt作为tab的元表setmetatable(tab, mt)--- 设置mt的__index元方法指向mt自己,这一步必不可少,后续会有介绍mt.__index = mt


以上代码中我们将 mt作为 tab的元表,按照OC或java来描述就是:我们将mt设置成了tab的类,tab是类mt的对象,因此tab不仅可以调用 test()方法,也可以访问 name变量。
print(tab.name)tab:test()
--- 执行结果momo@MOMOdeMacBook-Pro Desktop $ lua mt.lua元表this is a test functionmomo@MOMOdeMacBook-Pro Desktop $



为了强化类和对象的概念,以后我们称元表为类,以某个表A为元表的表B为A对象(有点绕

以上是关于lua元表(metatable)的主要内容,如果未能解决你的问题,请参考以下文章

lua中的元表---metatable

lua中的元表---metatable

lua元表(metatable)

Lua学习笔记-metatable元表

如何简单易懂的理解lua的元表metatable

Lua元表和元方法(Metatables and Metamethods)