cf中的class

class 意译为'类', 是对'对象'的一种抽象描述. 多用与各种面相对象编程语言中.

lua语言没有原生的class类型, 但是对class的wrapper提供了基本构建的元方法.

cf对此为方便描述内置对象与内置库封装, 使用lua table的相关元方法建立了最基本的class模型.

cf虽然规定了一套最基本的class创建、使用方法, 但是不会限制用户对class的操作方法与操作习惯.

cf为内简化对基于class封装的内置库的学习成本与代码可读性, 去除了class原本拥有的'继承'概念.

cf的class的运行流程

  • 定义一个class.

  • 添加用户自定义方法.

  • 等待用户使用class进行创建.

  • 使用new方法根据类来创建一个对象.

  • 操作对象.

cf如何使用class

1.导入class函数

  1. local class = require "class"

class库已经添加到cf框架的路径中, 可以在任意地方直接导入

2. 创建一个基本的lua class

  1. local class = require "class"
  2. local Humen = class("Humen")
  3. function Humen:ctor(opt)
  4. -- 不存在的ctor会发出警告
  5. -- 即使不需要初始化, 请定义后留空
  6. end

ctor内部发生错误将会抛出异常.

3. 初始化lua class

  1. local class = require "class"
  2. local Humen = class("Humen")
  3. function Humen:ctor(opt)
  4. self.name = opt.name
  5. self.age = opt.age
  6. self.sex = opt.sex
  7. end
  8. local man = Humen:new({name = "水果糖", age = 27, sex = 'man'})
  9. print(man.name, man.age, man.sex)

ctor仅为初始化使用, new方法将会返回一个成功创建的对象.

4. 为class增加一些方法

  1. local class = require "class"
  2. local Humen = class("Humen")
  3. function Humen:ctor(opt)
  4. self.name = opt.name
  5. self.age = opt.age
  6. self.sex = opt.sex
  7. end
  8. function Humen:run()
  9. print("I'm run.")
  10. end
  11. local man = Humen:new({name = "水果糖", age = 27, sex = 'man'})
  12. print(man.name, man.age, man.sex)
  13. man:run()

5. 为class的自定义方法添加一些接受参数

  1. local class = require "class"
  2. local Humen = class("Humen")
  3. function Humen:ctor(opt)
  4. self.name = opt.name
  5. self.age = opt.age
  6. self.sex = opt.sex
  7. end
  8. function Humen:setAge(age)
  9. self.age = age
  10. end
  11. function Humen:setName(name)
  12. self.name = name
  13. end
  14. local man = Humen:new({name = "水果糖", age = 27, sex = 'man'})
  15. print(man.name, man.age, man.sex)
  16. man:setName("Candy")
  17. man:setAge(28)