Lua
rickone2009
C/C++ Lua 游戏
展开
-
__index不能放在表内定义
发现一个很奇怪的现象,__index在表内定义无效,求解释~看测试代码:Test = {__index = Test;Foo = function(self) print(self.x, self.y);end;};--Test.__index = Test;function Test:New() local obj = { x = 0; y = 0; }; setmetatable(obj, self); return obj;endlocal t1 = Test:New();local t2 = T原创 2010-08-29 13:24:00 · 264 阅读 · 0 评论 -
实现类和继承、多重继承和多态
lua的类也是一个table,它有自己的metatable,主要有__index元操作,有成员函数,有构造函数,设计这样一个函数,它构造出这样一个table。function Class(t) local class = {}; class.__member_data = t or {}; class.__index = class; function class:InheritMemberData(...) local base = {self, ...}; local member_data = {原创 2010-09-02 23:30:00 · 523 阅读 · 0 评论 -
协程和枚举器
协程(Coroutine)就是一段能自己中断和唤醒的程序片段,借助线程去理解,不同的是,它是由你来维护,看起来异步的逻辑,其实是同步顺序执行的,非常美妙。 接触过一段Unity开发,了解到C#里也有协程,但和之前Lua里的不太一样。C#只提供了一个yield关键字,借助原本就存在的枚举器(IEnumerator)实现的。yield return 将对象返回到枚举器的上层调用,同时保存枚举器的函数内状态,直到上层调用枚举器的下一个取值。本质上C#是为了简化代码,更容易实现一种枚举器的写法,而协程是附加产物。原创 2014-11-11 00:00:29 · 688 阅读 · 0 评论 -
一个lua版的zset数据结构实现
redis里的zset是一种有序集合,从逻辑上,可以理解为在集合的基础上,为每一个成员增加了分数字段,分数是一种浮点数值,并可以相同,它们按序排列起来。它能对分数在增,删,查找上都能提供对数时间复杂度的操作。redis里的zset是利用一个skiplist和一个dict实现的,其中关键数据结构就是skiplist,跳跃表。skiplist的原理和基本实现网上有很多,不再啰嗦。基于zset的需求,会有原创 2016-09-02 00:12:38 · 1946 阅读 · 0 评论