1.具有默认值的table
function setDefault(t,d)
local mt={__index=function() return d end}
setmetatable(t,mt)
end
tab={x=10,y=20}
setDafault(tab,5)
print(tab.z) ———–5
2.跟踪table的访问
t={} —–需要跟踪的table(可能为与其他地方)
local _t=t —–保持对t的私有访问
t={} —创建一个代理,这三句目的在于将需要跟踪的表存放于一个表里然后再置空,因为所有对于元方法调用的前提是表中没有这个元素
local mt={
__index =function(t,k)
print(“访问成功”..tostring(k))
return _t[k]
end,
__newindex=funtion(t,k,v)
print(“更改成功”..tostring(k)..”—>”..tostring(v))
return _t[v]
end
}
setmetatable(t,mt)
t[2]=“update element” ——————输出更改成功2—》update element
print(t[3]) ——————-输出访问成功element
3.只读的table
funtion readOnly(t)
local proxy={}
proxy=t
local mt={
__index=proxy,
__newindex=function ()
print(“failed to update”)
end
}
setmetatable(proxy,mt)
return proxy
end
food=readOnly{“apple”,”banana”,”orange”}
print(food[2]) ——banana
food[2]=”rice” ——–falied to update