直观理解Lua继承实现

--lua类定义的一般模板:
function ClassName:New(o)
    o = o or {}
    setmetatable(o,{__index = self})    --给派生类设置新的元表,元表的__index元方法指向基类自己
    return o
end

或者

function ClassName:New(o)
    o = o or {}
    setmetatable(o,self)    --将基类自身设置为派生类的元表
    self.__index = self     --设置基类自身__index元方法指向基类自己
    return o
end

原理:

1.创建新的table(派生表),给派生表设置“元表”

2.并使“元表中的__index元方法指向基表自身

3.以此达到:访问派生表中不存在的key或方法时,会根据__index找基表里的key或方法

对于lua来说,对象和类并不存在一个严格的划分。

当一个对象被另一个table的__index元方法引用时,table就能引用该对象中所定义的方法

因此也就可以理解为对象变成了table的类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值