小白学到元方法里的一些地方,突发奇想不按教程的来常规操作会得出什么结果,记录一下
1.__index
__index的值可以是一个表也可以是一个函数,尝试在表里写入同名的函数和属性,观察返回结果。
meta1={
age=function (t,key)
return 100
end,
age=200
}
meta1.__index=meta1
table1={}
setmetatable(table1,meta1)
print(table1.age)
meta1={
age=200,
age=function (t,key)
return 100
end,
}
meta1.__index=meta1
table1={}
setmetatable(table1,meta1)
print(table1.age)
仔细一回味发现,对同一个键赋值,肯定是最后一次赋值为准,可以测但没必要(呲牙笑)
2.__add
__add元方法是在两个表相加时调用的,并且有一个表有元表且有__add元方法就可以调用。
尝试对两个表都设置不同的元表且具有不同的__add元方法,观察调用的是哪个元方法。
table4={
age=20
}
table5={
age=21
}
setmetatable(table4,{
__add=function(t1,t2)
return t1.age+t2.age
end
})
setmetatable(table5,{
__add=function(t1,t2)
return t1.age+t2.age+2
end
})
print(table4+table5) --41
print(table5+table4) --43
结果证明,哪个表在前面就会优先调用它的元表里的__add元方法,很神奇哈