Lua学习——面向对象

在菜鸟教程学习lua面向对象时有以下代码

 -- Meta class
Shape = {area = 0}
-- 基础类方法 new
function Shape:new (o,side)
  o = o or {}
  setmetatable(o, self)
  self.__index = self
  side = side or 0
  self.area = side*side;
  return o
end
-- 基础类方法 printArea
function Shape:printArea ()
  print("面积为 ",self.area)
end

Square = Shape:new()
-- Derived class method new
function Square:new (o,side)
  o = o or Shape:new(o,side)
  setmetatable(o, self)
  self.__index = self
  return o
end

在Shape:new的时候返回的是 一个空表o,o的元表是Shape ,把此对象记作A

A的结构:[A]-的元表->Shape

在Square:new的时候:

注意:Square本身就是一个对象A

创建了一个空表(此处记作对象B),然后将A设置为B的元表

那么此时的结构就是 [B(空表)] --的元表--> [A(Square)] --的元表-->[Shape]

所以Square:new的时候创建了一个空表,Square对象的本体是作为空表的元表来存在的,同样Shape也做为Square的元表来存在

根据lua对表元素的访问流程:

1.在目标表中查找key,若有返回该元素则return  否则go2

2.若没有元表则return nil ,否则 go3

3.若元表的__index 为nil 则return nil 否则 go4

4.若__index为方法,则return 否则 go5

5.(此时__index为表)将__index作为目标表从1开始重复


这样就能实现方法的继承与重写了





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值