对象是由属性、方法组成。在Lua中我们可以使用table来描述出属性及方法。

简单示例

下列示例中,Person类有两个属性及两个方法。

  1. Person = {age = 0, name = ""}
  2. -- 类的new方法
  3. function Person:new(age, name)
  4. o = {}
  5. setmetatable(o, self) -- self,继承给o
  6. self.__index = self -- 去元表(Metatable)那一节看是啥意思
  7. self.age = age or 0
  8. self.name = name or ""
  9. return o
  10. end
  11. -- 类的普通方法
  12. function Person:getAge()
  13. return self.age
  14. end

创建对象

创建对象是为类的实例分配内存的过程。每个类都有属于自己的内存并共享公共数据。

  1. p1 = Person:new(18, "oyyh")

访问属性

访问属性,我们可以用 .来访问

  1. print(p1.age)

访问成员函数(方法)

可以使用 :来访问成员函数

  1. print(p1:getAge())

完整示例

定一个类,单独放一个文件:Person.lua

  1. local Person = {age = 0, name = ""}
  2. -- 类的new方法
  3. function Person:new(age, name)
  4. local o = {}
  5. setmetatable(o, self) -- self,继承给o
  6. self.__index = self -- 去元表(Metatable)那一节看是啥意思
  7. self.age = age or 0
  8. self.name = name or ""
  9. return o
  10. end
  11. -- 类的普通方法
  12. function Person:getAge()
  13. return self.age
  14. end
  15. return Person

在另一个文件中引用该类:Client.lua

  1. Person = require "Person.lua" -- 引入类
  2. p1 = Person:new(18, "oyyh") -- 实例化对象
  3. print(p1.name) -- 调用对象的name属性
  4. print(p1:getAge()) -- 调用对象中的getAge()方法