一个用于实现面向对象编程**的Lua类模块。
- 该模块以C++类为原型,进行相关行为的模拟:
函数名 | 功能说明 |
---|---|
create | 相当于c++中的new,用于新建一个对象 |
destroy | 相当于c++中的delete, 用于删除一个对象 |
initialize | 相当于构造函数,使用new生成对象后会自动调用。如有继承关系,会先调用父类的initialize,再调用子类的initialize |
finalize | 相当于析构函数,使用destroy删除对象后会自动调用。如有继承关系,会先调用子类的finalize,再调用父类的finalize |
-
提供两个自定义“metamethod”:
__alloc
以及__dealloc
, 使用者可制定自己的对象生成与销毁处理逻辑,该功能对于实现“对象池”十分方便。 -
提供
is_class
与is_instance
函数,分别用于检测是否为类类型以及是否为类实例。 -
提供
is_subclass_of
与is_instance_of
函数,分别用于检测是否为指定类的子类或者实例。 -
提供
implements
能力,可以从另一个文件加载类的具体实现,类似于'.h'与'.c/cpp'的关系
把class.lua
文件拷贝到工程中即可使用。
local class = require("class")
local ClassA = class("ClassA") -- 无继承关系
local ClassB = class("ClassB", ClassA) -- 继承ClassA
function ClassA:initialize()
print("Class:initialize()")
end
function ClassA:finalize()
print("Class:finalize()")
end
...
local instanceA = ClassA:create()
local instanceB = ClassB:create()
instanceA:destroy()
instanceB:destroy()
file: decl/classA.lua
local classA = class("classA"):implements("impl/classA.impl")
return classA
file: impl/classA.impl.lua
function initialize(self)
print("initializer in classA.impl!")
end
function finalize(self)
print("finalizer in classA.impl!")
end
本工程使用busted作为单元测试框架,需要从luarocks进行安装。安装完毕后在工程目录执行:
busted -v
即可。
Apache License 2.0.