lua如何构造类

 1 function class(super, autoConstructSuper)
 2     local classType = {};
 3     classType.autoConstructSuper = autoConstructSuper or (autoConstructSuper == nil);
 4
 5     if super then
 6         classType.super = super;
 7         local mt = getmetatable(super);
 8         setmetatable(classType, { __index = super; __newindex = mt and mt.__newindex;});
 9     else
10         classType.setDelegate = function(self,delegate)
11             self.m_delegate = delegate;
12         end
13     end
14
15     return classType;
16 end
17
18
19 function new(classType, ...)
20     local obj = {};
21     local mt = getmetatable(classType);
22     setmetatable(obj, { __index = classType; __newindex = mt and mt.__newindex;});
23     do
24         local create;
25         create =
26             function(c, ...)
27                 if c.super and c.autoConstructSuper then
28                     create(c.super, ...);
29                 end
30                 if rawget(c,"ctor") then
31                     obj.currentSuper = c.super;
32                     c.ctor(obj, ...);
33                 end
34             end
35
36         create(classType, ...);
37     end
38     obj.currentSuper = nil;
39     return obj;
40 end
41
42
43 function delete(obj)
44     do
45         local destory =
46             function(c)
47                 while c do
48                     if rawget(c,"dtor") then
49                         c.dtor(obj);
50                     end
51
52                     c = getmetatable(c);
53                     c = c and c.__index;
54                 end
55             end
56         destory(obj);
57     end
58 end
时间: 2024-07-28 15:10:30

lua如何构造类的相关文章

【转载】Lua中实现类的原理

原文地址 http://wuzhiwei.net/lua_make_class/ 不错,将metatable讲的很透彻,我终于懂了. ------------------------------------------------------------ Lua中没有类的概念,但我们可以利用Lua本身的语言特性来实现类. 下文将详细的解释在Lua中实现类的原理,涉及到的细节点将拆分出来讲,相信对Lua中实现类的理解有困难的同学将会释疑. 类是什么? 想要实现类,就要知道类到底是什么. 在我看来,

Cocos2d-x3.0 lua绑定C++类

这里记录下我实现Lua绑定的全过程. 原文地址:http://blog.csdn.net/qqmcy/article/details/26099859 准备工作: 1.创一个一个Lua的2dx工程.(这个网上已经有好多了) 2.创一个C++类. TestScene.h  这个只是一个简单的场景 // // TestScene.h // uitestLua // // Created by 杜甲 on 14-5-17. // // #ifndef __uitestLua__TestScene__

关于Java构造类与对象的思考

简单记录一下Java构造类与对象时的流程以及this和super对于特殊例子的分析. 首先,接着昨天的问题,我做出了几个变形: Pic1.原版: Pic2.去掉了T.foo方法中的this关键字: Pic3.在原版的基础上抹掉了B.foo方法: Pic4.抹掉了原版的B.foo方法,同时去掉了T.foo方法中的this关键字: 这四个图全方位地对this和super两个关键字的有无进行了测试,测试结果表明:这些版本的程序的运行结果都一样... 在这里,还是插一张流程图: 首先说一下super关键

lua 面向对象编程类机制实现

lua no class It is a prototype based language. 在此语言中没有class关键字来创建类. 现代ES6, 已经添加class类. prototype based 语言没啥优势. lua 如何构建class机制? https://github.com/fanqingsong/oopclass.lua 提供lua的 Object Oriented Programing Class 实现: 比其他实现更加轻量 https://github.com/Yonab

Lua 自己实现类Class代码,和高级用法

Class代码实现: function class(classname, super) local superType = type(super) local cls if superType ~= "function" and superType ~= "table" then superType = nil super = nil end if superType == "function" or (super and super.__cty

Swift中类的两段式构造(类的构造过程)

import Foundation /* 类的构造需要两个阶段: 第一阶段: 1.程序调用子类的某个构造器 2.为实例分配内存, 此时实例的内存还没有被初始化 3.指定构造器确保子类定义的所有实例存储属性都已被赋初值 4.指定构造器将调用父类的构造器, 完成父类定义的实例存储属性的初始化 5.沿着调用父类构造器的构造器链一直往上执行, 直到到达构造器链的最顶部 第二阶段: 1.沿着继承树往下, 构造器此时可以修改实例属性和访问self, 甚至可以调用实例方法 2.最后, 构造器链中的便利构造器都

Lua绑定C++类

原文:http://blog.csdn.net/chenee543216/article/details/12074771 以下是代码: Animal.h文件 [cpp] view plaincopy #pragma once #ifndef __ANIMAL_H__ #define __ANIMAL_H__ class Animal { public: Animal( const char *name ); void setAge( int age ); int getAge(); void 

Quick-Cocos2dx-Community lua绑定,lua调用C++ 类

http://blog.csdn.net/marpools/article/details/44341021#reply 这里有篇文章,看三和四. 按上面操作,文件都不缺少的,可以直接看  2. 和 3 . 记住:player3 来打开项目, 的类格式化后,放到他的源代码路径下面, 解释生成的lua 也要放到 api下面 player3  重新生成就可以了 player3    最后打开可能会出现, a nil value. 其实,我们用cocos2d-x-3.10, D:\cocos\setu

lua中基类和“继承机制”

基类:基类定义了所有对于派生类来说普通的属性和方法,派生类从基类继承所需的属性和方法,且在派生类中增加新的属性和方法. 继承:继承是C++语言的一种重要机制,它允许在已定义的类的基础上产生新类. lua基类和C++基类极为相似,但是lua中却没有继承这一说,更没有所谓的派生类.lua只能通过一种行为(元表)来模拟C++继承这一方法. 元表:lua中提供的元表是用于帮助lua数据变量完成某些非预定义功能的个性化行为,当它做某一种操作,然而self表中却没有定义实现这种操作的方法,那么为了实现这一操