Lua笔记15 __index

--[[__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 ]]


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值