Lua元表就相当于给一个table外接一个表,当想要找一个元素的时候,如果Lua从自身的表中没有找到该元素的话就会从外接的元表中去找,如果找到该元素就会通过__index来返回,如果找的过程中有方法的话,就会调用该方法,等到方法完成之后再继续找;如果自身表以及元表中都没有该元素,那么就返回nil
对指定的表设置元表:
mytable={}
mymetatatable={}
–使用setmetatable关键字对表创建一个元表:setmetatable(自身表,外接的表)
setmetatable(mytable,mymetatable)
也可简写:
mytable=setmetatable({},{})
返回对象的元表
–返回mytable的元表
getmetatable(mytable)
__index元方法
这是元表中最常用的键,当我门通过__index来访问表的时候,如果该表中没有我们想要的元素,那么它就会从该表的元表中查找,如果查找的过程中__index指向一个方法,那么就会执行该方法,如果__index指向的是某个表,就会从该表中查找这个元素;找到了就返回该元素,否则返回nil
例子:
mytable={["keyOne"]=1}
function myFunc(tmpKey)
if (tmpKey=="keyThree") then
print("asdfadf")
return keyThree
end
end
tmptable={["keyTwo"]=2,"abcd",myFunc()
}
setmetatable(mytable,{__index=tmptable})
print(mytable["keyTwo"])