此模块中定义了一个对象Object(用table实现的)。这个对象是一个最基础的原生对象,任何其它的类和对象都是从这个源头衍生的。它的地位跟java中的Object地位一致。
Object定义了几个属性和方法:
属性:
__tag : 每个类的定义都需要加入此属性,以标识类的名字和继承关系
_parent : 指向父对象(或类对象)
方法:
new: 此方法为内部接口,用于生成一个新的对象(子类对象或类的实例对象)
extend: 此方法为导出接口,用于从一个现有类上定义一个新的类
isInstance: 此方法用于判断自己是否是一个类的实例
isClass: 此方法用于判断自己是否是一个类
在实例使用时,仿照如下形式定义一个类。
module(..., package.seeall) -- 在bamboo.model中,已经执行了 require 'lglib.oop' 了 local Model = require 'bamboo.model' local Message = Model:extend { -- 属性的话,只有这个__tag是必须的 __tag = 'Bamboo.Model.Message'; __name = 'Message'; __desc = 'General message definition.'; -- 方法的话,只有这个init是必须的,参数中第一个必须为self init = function (self, t) if not t then return self end self.type = t.type -- self.uuid = t.uuid self.author = t.author self.content = t.content self.timestamp = t.timestamp or os.time() return self end; doSomething = function (self) ..... end; } return Message
使用这个类:
下面创建两个消息实例 local msg_obj = Message() -- 创建一个空消息 local msg_obj2 = Message { -- 创建一个有内容的消息 type = '100', author = 'daoge', content = 'hello', } msg_obj2:doSomething(); -- 调用类中定义的方法
-----------------------------------------
实际上,此处的oop只是用table进行的模拟,关于采用的什么决策,我们后面另外详细说明。现在的机制不一定很完善,还有改进的空间。