元表和元方法
原创
©著作权归作者所有:来自51CTO博客作者我的流浪国的原创作品,请联系作者获取转载授权,否则将追究法律责任
1.元表


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

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

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