Lua笔记19 面向对象实现__index

来源:互联网 发布:excel对应数据替换 编辑:程序博客网 时间:2024/04/28 06:09
--[[使用__index元表方法来实现table的继承特性]]Acount = { balance = 100 }function Acount:deposit(v)self.balance = self.balance +vendfunction Acount:new(o)o = o or {}       --当o不存在,会定义o={}setmetatable(o,self)  --将Acount作为元表self.__index = self     --自身的__index 方法,为Acount 表return oendb = 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) doprint("c 表中元素:",v)endprint("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)

0 0
原创粉丝点击