<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())