1.元表

元表和元方法_元表


元表和元方法_元表_02

tableA={"1","2","3","4","5"}
tableB={__index = function()
return "不存在"
end,
name="name",
}
tablec=setmetatable(tableA,tableB)
tableD=getmetatable(tableA)
print(tableA[9]) --不存在
print(tableD.name) --name

2.元方法__index

元表和元方法_元表_03

tableA={"1"}
tableB={__index = function()
return "不存在"
end,
name="name",
}
setmetatable(tableA,tableB)
print(tableA.name) --不存在
tableA={"1"}
local tableC = {name="Name"}
tableB={__index = tableC,
}
setmetatable(tableA,tableB)
print(tableA.name) --Name
prototype={x=0,y=0,width=100,height=200}
function new(o)
return setmetatable(o,{__index=prototype})
end
w=new({x=10,y=20})
print(w.width,w.height,w.x) --100 200 10



元表和元方法_元表_04

function setDefault(t,d)
local mt = {__index=function() return d end}
setmetatable(t,mt)
end
tab={x=10,y=20}
print(tab.x,tab.z) --10 nil
setDefault(tab,100)
print(tab.x,tab.z) --10 100