2.元表
2.1 元表(metatable)
元表是table预定义的一系列操作,使用setmetatable设置元表,参数为任意的table,包括要赋值的table本身
2.2 元方法介绍
(1)__index 用于table的查询
它的值可以为一个函数:将缺少的域和table作为参数调用这个函数
一个表:直接作为索引进行查询
在get表中未定义元素时触发,对应有rawget(table,key)避免调用__index
(2)__newindex 用于table的更新
当table中不存在索引赋值时,直接调用该方法
在set表中未定义元素时触发,对应有rawget(table,key)避免调用__newindex
(3)__tostring (被print()调用) __concat(连接) __eq(等于) __it(小于) __le(大于)
2.3封装
setmetatable3.lua
people ={age=18}
function people:new()
local p={}
setmetatable(p,self)
self.__index=self
return p
end
function people:growup()
self.age=self.age+1
print(self.age)
end
--test
p1=people:new()
p1:growup()
p2=people:new()
p2:growup()
运行结果:
2.4 继承
setmetatable4.lua
people ={age=18}
function people:new()
local p={}
setmetatable(p,self)
self.__index=self
return p
end
function people:growup()
self.age=self.age+1
print(self.age)
end
man=people:new()
function man:growup()
self.age=self.age+1
print("the man’s age is :"..self.age)
end
--test
man1=man:new()
man1:growup()
运行结果: