摘要: Lua将其所有的全局变量保存在一个常规的table中,称为“global environment”。 Lua将环境table自身保存在一个全局变量_G中,_G._G等于 _G . 比如下面的代码打印出_G中所有的全局变量: 具有动态名字的全局变量 对于访问和设置全局变量,通常赋值操作就可以了。不过, 阅读全文
posted @ 2016-09-08 17:43 daiker 阅读(145) 评论(0) 推荐(0) 编辑
摘要: __index和__newindex都是在table中没有所需访问的index时才发挥作用。 因此,只有将一个table保持为空,才有可能捕捉到所有对它的访问。为了监视一个table的所有访问,就应该为真正的table创建一个代理。 这个代理就是一个空的table,其中__index和__newin 阅读全文
posted @ 2016-09-08 11:05 daiker 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 前两节的算术类、关系类运算符的元方法都为各种错误情况定义了行为,它们不会改变语言的常规行为。 但是Lua还提供了两种可以改变table行为的方法: 一种是查询table中不存在的字段、一种是修改table中不存在的字段。 __index元方法 当访问一个table中不存在的字段时,得到的结果为nil 阅读全文
posted @ 2016-09-07 19:36 daiker 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 元表还可以指定关系操作符的含义,元方法为__eq ,__lt(小于) ,__le(小于等于). 而其它3个关系操作符则没有单独的元方法,Lua会 把a ~= b 转化为not(a == b) 将a>b 转化为 b < a ; 将a>=b 转化为 b <= a ; 因此需要分别为__le和__lt提供 阅读全文
posted @ 2016-09-07 10:04 daiker 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 假设用table来表示集合,用function去计算集合的交集、并集。 为了保持名称空间的整齐,将这些函数存入一个名为Set的table中。 现在,假设用“+”来计算两个集合的并集,那么就要让所有用于表示集合的table共享一个元表。 并且在该元表中定义如何执行一个加法操作。 在此后,用Set.ne 阅读全文
posted @ 2016-09-05 17:35 daiker 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 通常,Lua中的每个值都有一套预定义的操作集合。 例如:可以将数字相加、可以连接字符串、可以在table中插入一对key-value等。 但是无法将两个table相加,无法对函数作比较,或无法调用一个字符串。 可以通过元表来修改一个值的行为,使其在面对一个非预定义的操作时执行一个指定的操作。 例如: 阅读全文
posted @ 2016-09-05 16:01 daiker 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 保存table有几种方法,选用哪种方法取决于对table的结构作出了哪些限制性的假设 第一个方法: 只要table的结构是一个树结构,这种方法还能处理嵌套的table。 如果一个table的key为数字或者非法的Lua标识符,就会出现问题,一个简单的解决办法是: 改为: 这样,便增强了这个函数的强健 阅读全文
posted @ 2016-09-05 14:31 daiker 阅读(162) 评论(0) 推荐(0) 编辑
摘要: Lua的一个重要特性,就是可以作为配置文件,利用到table构造式来定义一种文件格式。 只需要在写数据时做一点额外的工作,读取数据就会变得相当容易。也就是将数据作为Lua代码输出。 当运行这些代码时,程序也就读取了数据。而table的构造式可以使这些输出代码看上去更像是一个普通的数据文件。 如果是为 阅读全文
posted @ 2016-09-05 14:01 daiker 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 逐行地读取一个文件,典型的代码是: 这段代码看似可以正常工作,但是如果面对较大的文件时,性能开销极大。 Lua提供了io.read("*a")选项,这样可以一次性读取整个文件。 在Lua中,可以将一个table作为字符串缓冲。关键是使用函数table.concat,它将给定列表中的所有字符串连接起来 阅读全文
posted @ 2016-09-02 11:34 daiker 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 链表 由于table是动态的实体,所以在Lua中实现链表是很方便的。每个节点以一个table来表示,一个“链表”只是节点table中的一个字段。 该字段包含了对其他table的引用。例如,要实现一个基础的列表,其中每个节点具有两个字段:next和value 创建一个链表: 也可以参考之前的一篇文章: 阅读全文
posted @ 2016-09-01 16:11 daiker 阅读(339) 评论(0) 推荐(0) 编辑