Lesson15_Lua基础_元表metatable
一、元表概念
任何表都可以作为另一个表的元表
任何表都有元表(类似父类)
一个表进行一些特定操作时,会执行元表中的内容,并且如果有参数,第一个参数会默认传入被调用的子表
特定操作类型在文章最下方
二、设置原表
meta={
__tostring = function(t) --注意,这里的__tostring,__call,__add都是lua中关于元表的特定操作,具体的下面解释
return t.name 特定操作中的内容还是需要我们自己去实现的,根据需求自己实现
end,
__call = function ()
print("lxlxlx")
end,
__add=function ( a,b )
return a.age+b.age
end,
}
myTable={
name="lx",
age=1,
}
myTable2={
age=2
}
setmetatable(myTable,meta)--关键方法,将meta设置为myTable的元表
setmetatable(myTable2,meta)
print(myTable)--这里子表(myTable)默认去调用了元表(meta)的__tostring特定操作
myTable()--这里默认调用了元表中的__call
print(myTable+myTable2) --运算符重载默认调用了__add
meta.__index=myTable --建议把__inde初始化都放在元表外部
print(myTable2.name) --myTable2并没有name,根据元表的__index指定的表来寻找
--特定操作
-- __tostring 当子表被作为字符串使用时调用元表中的此
-- __call 当子表被作为函数使用时调用元表中的此
-- __add(+) __sub(-) __mul(*) _div(/) 运算符重载(还有其他的)
-- __index 当子表访问了一个子表中不存在的属性时,会从__index指定的表中去找索引
-- __newindex 当赋值时,如果赋值一个不存在的属性,那么会赋值到__newindex指的表中,不会修改自己
--其他
--getmetatable(a) 获得表的元表

浙公网安备 33010602011771号