1.元表
首先我们从形式上去认识lua的元表,lua通过两个函数去设置和获取一个值的元表。
t = {} mt = {} setmetatable(t,mt) --将mt设置为t的元表 getmetatable(t) --获取t的元表,结果为mt
元表从语法形式上就只有以上的内容了。那么元表用途是什么?
以我的理解,元表的作用是通过元方法去延展、补充原本表的功能。
ps:后续实例中,默认t是表,mt是t的元表。
2.算数运算元方法
lua中两个表之间如何去定义算数运算,是通过元表外加元方法的方式去实现的。下面举个简单的例子。
mt = {__add = function(t1,t2) for _,v in ipairs(t2) do table.insert(t1,v) end return t1 end} t1 = {1,2} setmetatable(t1,mt) t2 = {3} t = t1 + t2 -->{1,2,3}
我们用“__add”这个元方法实现了自定义表结构的算数运算。除了“__add”,还有一系列的算数运算方法:减法(__sub);除法(__div);负数(__unm);取模(__mod)。类似的还有一系列位运算相关的元方法这里就不一一列出来了。
3.特殊的元方法
__tostring,这个元方法正如他的样子,有这个值时,函数tostring就会调用这个元方法完成工作。(ps:print函数会默认调用输出值的tostring方法)。