对象是由属性、方法组成。在Lua中我们可以使用table来描述出属性及方法。
简单示例
下列示例中,Person类有两个属性及两个方法。
Person = {age = 0, name = ""}
-- 类的new方法
function Person:new(age, name)
o = {}
setmetatable(o, self) -- 将self,继承给o
self.__index = self -- 去元表(Metatable)那一节看是啥意思
self.age = age or 0
self.name = name or ""
return o
end
-- 类的普通方法
function Person:getAge()
return self.age
end
创建对象
创建对象是为类的实例分配内存的过程。每个类都有属于自己的内存并共享公共数据。
p1 = Person:new(18, "oyyh")
访问属性
访问属性,我们可以用 .
来访问
print(p1.age)
访问成员函数(方法)
可以使用 :
来访问成员函数
print(p1:getAge())
完整示例
定一个类,单独放一个文件:Person.lua
local Person = {age = 0, name = ""}
-- 类的new方法
function Person:new(age, name)
local o = {}
setmetatable(o, self) -- 将self,继承给o
self.__index = self -- 去元表(Metatable)那一节看是啥意思
self.age = age or 0
self.name = name or ""
return o
end
-- 类的普通方法
function Person:getAge()
return self.age
end
return Person
在另一个文件中引用该类:Client.lua
Person = require "Person.lua" -- 引入类
p1 = Person:new(18, "oyyh") -- 实例化对象
print(p1.name) -- 调用对象的name属性
print(p1:getAge()) -- 调用对象中的getAge()方法