xlua学习之路(三)Lua面向对象

简单实例

lua创建对象】假如我们有一个人,这个人名字将张三,年龄18,在lua中我们可以这样实现

person={name="张三",age=18}

那么现在我们又来了人,名字叫李四,年龄22,于是我们又要写一遍,就像这样

person2={name="李四",age=22}

要是我们有100个人,1000个人就会很繁琐
于是我们就可以写一个模板Person,然后给他写个创建对象的方法,就像这样

Person={name="",age=1}
function Person.new(self,name,age)
            t={}
            setmetatable(t,{__index=self})
            t.name=name
            t.age=age
            return t
end

person=Person.new(Person,"张三",18)
person2=Person.new(Person,"李四",22)

但是这样每次我们还得把自身传进去也很麻烦,lua语言为我们提供了语法糖,我们可以通过:代替.调用方法,使用:会自动把self传进去

Person={name="",age=1}
function Person:new(name,age)
            t={}
            setmetatable(t,{__index=self})
            t.name=name
            t.age=age
            return t
end

person=Person:new("张三",18)
person2=Person:new("李四",22)

lua方法是支持重载的,我们可以写很多个new方法,这就有点像c#里面的构造方法
lua继承

person={name="",age=1}   --基础表
function person:new()         --类似于c#的无参构造方法
	t={}                                   --创建一张空表
	setmetatable(t,{__index=self})    --设置元表,元表的__index指向自身
	return t                             --返回这张表     
	end

function person:new(name,age)    --重载
	t={}                         
	setmetatable(t,self)                   --这里换了一种写法,和上面类似   把self自身设置为t表的元表
	self.__index=self                       --self的__index指向自身
	t.name=name                            
	t.age=age
	return t
	end

father=person:new()                 --创建对象
function father:learn()               --为基类对象添加个learn方法  
	print(self.name.."学习")
	end

son=father:new("李四",23)       --创建派生类对象
son:learn()                               --子类继承了父类的learn方法,字段等


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值