lua类对象创建继承和使用2
2015-09-06 17:57
465 查看
function class(classname, super) local superType = type(super) local cls --如果父类既不是函数也不是table则说明父类为空 if superType ~= "function" and superType ~= "table" then superType = nil super = nil end --如果父类的类型是函数或者是C对象 if superType == "function" or (super and super.__ctype == 1) then -- inherited from native C++ Object cls = {} --如果父类是表则复制成员并且设置这个类的继承信息 --如果是函数类型则设置构造方法并且设置ctor函数 if superType == "table" then -- copy fields from super for k,v in pairs(super) do cls[k] = v end cls.__create = super.__create cls.super = super else cls.__create = super cls.ctor = function() end end --设置类型的名称 cls.__cname = classname cls.__ctype = 1 --定义该类型的创建实例的函数为基类的构造函数后复制到子类实例 --并且调用子数的ctor方法 function cls.new(...) local instance = cls.__create(...) -- copy fields from class to native object for k,v in pairs(cls) do instance[k] = v end instance.class = cls instance:ctor(...) return instance end else --如果是继承自普通的lua表,则设置一下原型,并且构造实例后也会调用ctor方法 -- inherited from Lua Object if super then cls = {} setmetatable(cls, {__index = super}) cls.super = super else cls = {ctor = function() end} end cls.__cname = classname cls.__ctype = 2 -- lua cls.__index = cls function cls.new(...) local instance = setmetatable({}, cls) instance.class = cls instance:ctor(...) return instance end end return cls end
相关文章推荐
- Lua图文混排
- Lua4.0中的函数
- Lua 的模式匹配
- Lua5.0 语法分析
- string evaluated instead to freemarker.template.SimpleScalar
- UPYUN 的 ngx_lua 应用实践 » 社区 » Ruby China
- Lua 基本语法
- tengine+lua实现时时在线图片缩放,剪切。 - epiclight的colorful world - 开源中国社区
- FPN/lua-sdk-for-UPYUN - GitCafe
- Tengine + Lua + GraphicsMagick 实现图片自动裁剪/缩放 - 腾勇的个人页面 - 开源中国社区
- cloudflare的新waf,用Lua实现的 - 囧囧有神的专栏 - 博客频道 - CSDN.NET
- tengine+lua实现时时在线图片缩放,剪切。 - epiclight的colorful world - 开源中国社区
- sphinx下的lua客户端 - IT博客汇
- 生产环境中 Ngx_lua 使用技巧和应用的范例 - 推酷
- 让lua支持base64和md5 - xu_ya_fei的专栏 - 博客频道 - CSDN.NET
- 使用Lua和OpenResty搭建验证码服务器 - JavaChen Blog
- lua调试器与编辑器开源项目luacode(源自decoda)
- lua和luajit在mac模拟器中的运行比较
- 测试了几款 C# 脚本引擎 , Jint , Jurassic , Nlua, ClearScript
- Lua学习笔记之——类与继承的简单实现