Lua笔记19 面向对象实现__index

--[[使用__index元表方法来实现table的继承特性]]

Acount = { balance = 100 }

function Acount:deposit(v)
	self.balance = self.balance +v
	
end

function Acount:new(o)
	o = o or {}       --当o不存在,会定义o={}
	setmetatable(o,self)  --将Acount作为元表
	self.__index = self     --自身的__index 方法,为Acount 表
	return o
end

b = Acount:new()

print(getmetatable(b))
print(Acount)

b:deposit(100)       --[[注意 :使用的是冒号]]
--[[lua 无法在table b中查找到“条目”deposit 时,它会搜索元表的__index条目 。 即:

b:deposit(100) 等价于:
getmetatable(b).__index.deposit(b,100)
getmetatable(b) = Acount. 那么就等于: Acount.__index.deposit(b,100)

Acount.__index 值为 Acount。所以 也等于:Acount.deposit(b,100),这个函数的结果为:b.balance 的值。
]]

print(b.balance)  --[[访问一个b没有的字段时,查找元表的__index方法,即:getmetatable(b).__index.balance,那么实际上返回的结果是 Acount.balance的值 。]] 

c = Acount:new({"aa","bb"})

for _,v in ipairs(c) do
	print("c 表中元素:",v)

end

print("c.balance 的值:",c.balance)                --[[访问一个b没有的字段时,查找元表的__index方法,即:getmetatable(b).__index.balance,那么实际上返回的结果是 Acount.balance的值 。]] 

 

d = Acount:new({k1 = "mm",k2 = "gg"})

print(d["k1"])
print(d.k1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值