56__index元方法

__index(两个下划线)
定义普通表
给普通表p,设置元表y,而元表y中有index,__index有一个表i,i中有我们访问的不存在的key.

__index=表

print("---测试__index----")
-- 普通表
tab1  = {"a","b","c"}
print(tab1[5])

-- 普通表,有一个元表,5= "e"
newTab = {}
newTab[5] ="e"
metaTab1 = {__index=newTab}

setmetatable(tab1,metaTab1)
print(tab1[5])
输出结果
nil
e

__index= 函数(表,key)

print("---测试__index----")
-- 普通表
tab1  = {"a","b","c"}
print(tab1[5])

print("原始的table:",tab1)

metaTab1 = {
	__index=function(tab,key)
		print("参数当中的tab:",tab)
		print("参数当中的key:",key)
		
		if(key == 5) then 
			return "index--5"
		end
end
}

setmetatable(tab1,metaTab1)
print(tab1[5])


输出结果:
---测试__index----
nil
原始的table:    table: 00B58F78
参数当中的tab:  table: 00B58F78
参数当中的key:  5
index--5

请求表中key的值:
先在普通表中找,有返回,没有,看原表。
如果原表有--index,且--index中有对应的key.
如果没有,继续--index的function

posted @ 2022-07-25 22:49  再努力一些  阅读(55)  评论(0)    收藏  举报