lglib.oop 简介

本文介绍了一种用于Lua的面向对象编程模块lglib.oop,它通过使用table来模拟面向对象机制,并提供了基本的对象定义和操作。通过示例展示了如何在Lua中创建和使用类和对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lglib.oop是一个特殊的模块,它用于给现有lua基础提供一套好用的面向对象机制。

此模块中定义了一个对象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进行的模拟,关于采用的什么决策,我们后面另外详细说明。现在的机制不一定很完善,还有改进的空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值