Lua元表

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"])

Lua元表_第1张图片

你可能感兴趣的:(Lua)