Lua_面向对象

<pre class="cpp" name="code"><pre class="cpp" name="code">-- 在Lua中不能定义类,但可以使用table类型变量来当成对象,对象有成员变量和成员方法,例如下面的例子:

Student = {id = 100, name = "Tony"}

function Student:toString()
	local s = "Name:" .. Student.name .. " id:" .. Student.id
	return s
end

print(Student:toString())


-- 在Java和C++是用this来代表对象本身,Object-C是用self来代表对象本身,而Lua也是用self来代表对象本身,例如下面的例子:

Student = {id = 100, name = "Tony"}

function Student:toString()
	local s = "Name:" .. self.name .. " id:" .. self.id
	return s
end

print(Student:toString())
-- 在Lua中没有类的定义,但是可以自己实现类,我们知道,类其实就是对象的模板,那么我们可以使用table类型变量来作为类,也就是作为模板,从而就可以实现面向对象,例如下面的例子:

Student = {id = 100, name = "Tony"}

function Student:create(o)
	o = o or {}   --传进来的o如果是空值,则把一个空的table赋给o
	setmetatable(o, self)   --设置o的元表为self,也就是Student
	self.__index = self   --设置self的元方法为本身,也就是首先在自身查找成员变量和成员方法,如果找不到,再到元表中,也就是到Student中查找
	return o   --返回o
end

function Student:toString()
	local s = "Name:" .. self.name .. " id:" .. self.id
	return s
end

local stu1 = Student:create()
local stu2 = Student:create({id = 200, name = "Tom"})
local stu3 = Student:create({id = 300, name = "Kity"})

print(stu1:toString())
print(stu2:toString())
print(stu3:toString())



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值