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.  
  4. function Humen:ctor(opt)
  5. -- 不存在的ctor会发出警告
  6. -- 即使不需要初始化, 请定义后留空
  7. end

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

3. 初始化lua class

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

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

4. 为class增加一些方法

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

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

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

最后