--[[__index元方法,当访问一个table中不存在的字段时,得到的结果为nil。这个访问会促使解释器去找一个叫__index的元方法,如果没有这个元方法,那么访问结果如前述的为nil。否则,就由这个元方法来提供最终结果。__index可以为函数或者table]]
windows={}
windows.default={x=0,y=0,width=100,height=100,color={r=255,g=255,b=255}}
windows.mt={} --声明元表
--声明构造函数
function windows.new(ob)
setmetatable(ob,windows.mt) --设置新window 的元表
return ob
end
--[[定义一个__index 方法
windows.mt.__index=function(table,key)
return windows.default[key]
end
]]
--[[另外一种定义形式,为table时,lua会以table名称和“不存在”的key来从新访问这个table。]]
windows.mt.__index=windows.default
local winInst=windows.new({x=10,y=10})
print(winInst.x)
print(winInst.y)
print(winInst.width) --调用的时候是windows.default["width"]
print(winInst.height) --调用的时候是windows.default["height"]
--[[执行过程,当lua检测到winIst 访问的是一个没有定义值的字段时,但在元表中有个一个__index字段,那么lua会以winIst和这个不存在的key 来调用这个__index元方法。]]
--[[__index 可以是一个 table ]]
Lua笔记15 __index
最新推荐文章于 2024-05-04 04:39:25 发布