/class.lua

An Object Orientation Module for Lua.

Primary LanguageLuaApache License 2.0Apache-2.0

lua-class

Build Status Coverage Status License

一个用于实现面向对象编程**的Lua类模块。

Features

  1. 该模块以C++类为原型,进行相关行为的模拟:
函数名 功能说明
create 相当于c++中的new,用于新建一个对象
destroy 相当于c++中的delete, 用于删除一个对象
initialize 相当于构造函数,使用new生成对象后会自动调用。如有继承关系,会先调用父类的initialize,再调用子类的initialize
finalize 相当于析构函数,使用destroy删除对象后会自动调用。如有继承关系,会先调用子类的finalize,再调用父类的finalize
  1. 提供两个自定义“metamethod”:__alloc以及__dealloc, 使用者可制定自己的对象生成与销毁处理逻辑,该功能对于实现“对象池”十分方便。

  2. 提供is_classis_instance函数,分别用于检测是否为类类型以及是否为类实例。

  3. 提供is_subclass_ofis_instance_of函数,分别用于检测是否为指定类的子类或者实例。

  4. 提供implements能力,可以从另一个文件加载类的具体实现,类似于'.h'与'.c/cpp'的关系

Installation

class.lua文件拷贝到工程中即可使用。

Usage

定义一个类:

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

UnitTest

本工程使用busted作为单元测试框架,需要从luarocks进行安装。安装完毕后在工程目录执行:

busted -v

即可。

License

Apache License 2.0.