摘要: Lua中的垃圾回收主要是针对Lua对象,但是也可以做一些额外的资源管理工作。 可以为表设定垃圾收集的元方法(对于完全用户数据,则需要使用C API),该元方法称为 终结器。 Lua用"__gc" 元方法实现终结器: 如果我们没有对对象进行__gc标记,它就不会终结。 在它之后才给元表加上这个__gc 阅读全文
posted @ 2016-09-19 20:00 daiker 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 对象属性 有很多情况需要把有些属性绑定到某个对象,例如:函数与其名称、table的默认值、数组大小等... 当对象是一个table时,可以通过适当的key将属性存储在这个table中。 如果对象不是一个table,它就无法保存属性了。 另外,即使是table,有时也不想将属性存储在原table中。可 阅读全文
posted @ 2016-09-19 17:47 daiker 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 一项通用的编程技术:用空间换时间。 例如有一种做法就可以提高一些函数的运行速度,记录下函数计算的结果,当再次调用该函数时,便可以复用之前的结果。 比如,一个普通服务器,在它收到请求中包含Lua代码,会loadstring,编译出新函数。为了避免反复loadstring,用一个辅助table保存编译结 阅读全文
posted @ 2016-09-19 16:13 daiker 阅读(161) 评论(0) 推荐(0) 编辑
摘要: Lua采用了自动内存管理。所以不用担心新创建的对象需要的内存如何分配出来,也不用考虑对象不再被使用后怎样释放它们所占用的内存。 Lua实现了一个增量标记-扫描收集器。它使用这两个数字来控制垃圾收集循环:垃圾收集器间歇率 和 垃圾收集器步进倍率。 这两个数字都使用百分数为单位(例如:100在内部表示1 阅读全文
posted @ 2016-09-19 11:29 daiker 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 当一个对象只有一个方法时,可以不用创建接口table,但是要将这个单独的方法作为对象来返回。可以参考迭代器那一节,是如何构造一个迭代器函数,那个函数将状态保存为closure。 一个具有状态的迭代器是一个单一方法对象。 单一方法对象还有一种情况,若这个方法是一个调度(dispatch)方法,它根据某 阅读全文
posted @ 2016-09-19 09:18 daiker 阅读(125) 评论(0) 推荐(0) 编辑