Lua学习笔记之——类与继承的简单实现

刚刚接触Lua,跟c++比起来简直是太让人舒服了,比如函数可以返回多个值......

现在记录一下如何用Lua实现一个简单的类和简单的继承。


function MyClass(name,id)

	local object = { name = name , id = id }

	function object:SetName(name)
		self.name = name
	end

	function object:SetId(id)
		self.id = id
	end

	function object:GetName()
		return self.name
	end

	function object:GetId()
		return self.id
	end

	return object

end


从代码可以看出这个类想要实现的功能是存储和读取人物的姓名和ID,我们先看看如何使用它:

me = MyClass("banana",123)
print(me:GetName(),me:GetId())
me:SetName("haha")
me:SetId(456)
print(me:GetName(),me:GetId())
--output--
banana	123
haha	456


是不是特别简单,我们再来稍微深入的看一下:

me = MyClass("banana",123)
for k,v in pairs(me) do
	print(k,v)
end
--output--
SetName	function: 006FC4B8
GetId	function: 006FC518
id	123
SetId	function: 006FC4D8
GetName	function: 006FC4F8
name	banana
从这里我们可以看到 “me” 其实就是一张表,里面存着类的成员变量和成员函数,我们用function的方式模拟了C++中类的构造函数。但是“它”好像还没有私有的概念,咱们暂且不考虑。


说到c++的class,我们就会想到继承和多态,现在先说说继承,多态之后再学习。

派生类的基本思路与基类差不多,就是需要一点小技巧:基类就是创建一个表,而派生类就是以基类的表为基础再在上面增加数据。

function MyClassTwo(name,id,age)

	local object = MyClass(name,id)
	object.age = 0

	function object:SetAge(age)
		self.age = age
	end

	function object:GetAge()
		return self.age
	end

	return object

end
MyClassTwo与上面的MyClass差不多,也比较简单。


我们再来输出这个MyClassTwo看看:

me = MyClassTwo("banana",123)
for k,v in pairs(me) do
	print(k,v)
end
--output--
SetId	function: 0042DC70
id	123
GetName	function: 0072B588
name	banana
GetAge	function: 0072B628
SetAge	function: 0072B568
age	0
SetName	function: 0072C538
GetId	function: 0072B5A8
没有错,它就是基类表的一个扩展








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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值