--[[使用__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)
Lua笔记19 面向对象实现__index
最新推荐文章于 2019-08-13 09:58:54 发布