Lua程序设计(第4版)
作者:(巴西)罗伯拖·鲁萨利姆斯奇
出版社:电子工业出版社
出版时间:2018-07-01
ISBN:9787121338045
定价:¥89.00
第 1 部分 语言基础 1
1 Lua 语言入门 2
1.1 程序段 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 一些词法规范 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 全局变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4 类型和值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4.1 nil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4.2 Boolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.5 独立解释器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.6 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2 小插曲:八皇后问题 13
2.1 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3 数值 17
3.1 数值常量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2 算术运算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.3 关系运算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.4 数学库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.4.1 随机数发生器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.4.2 取整函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.5 表示范围 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.6 惯例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.7 运算符优先级 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.8 兼容性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.9 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4 字符串 30
4.1 字符串常量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.2 长字符串/多行字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.3 强制类型转换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.4 字符串标准库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.5 Unicode 编码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.6 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5 表 43
5.1 表索引 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.2 表构造器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.3 数组、列表和序列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.4 遍历表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.5 安全访问 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.6 表标准库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.7 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
6 函数 56
6.1 多返回值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
6.2 可变长参数函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.3 函数 table.unpack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
6.4 正确的尾调用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
6.5 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 7 输入输出 68
7.1 简单 I/O 模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
7.2 完整 I/O 模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
7.3 其他文件操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
7.4 其他系统调用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
7.4.1 运行系统命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
7.5 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
8 补充知识 78
8.1 局部变量和代码块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
8.2 控制结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
8.2.1 if then else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
8.2.2 while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
8.2.3 repeat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
8.2.4 数值型 for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
8.2.5 泛型 for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
8.3 break、return 和 goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
8.4 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
第 2 部分 编程实操 90
9 闭包 91
9.1 函数是第一类值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
9.2 非全局函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
9.3 词法定界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
9.4 小试函数式编程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
9.5 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 10 模式匹配 105
10.1 模式匹配的相关函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
10.1.1 函数 string.find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
10.1.2 函数 string.match . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
10.1.3 函数 string.gsub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
10.1.4 函数 string.gmatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
10.2 模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
10.3 捕获 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
10.4 替换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
10.4.1 URL 编码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
10.4.2 制表符展开 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
10.5 诀窍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
10.6 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
11 小插曲:出现频率最高的单词 124
11.1 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
12 日期和时间 128
12.1 函数 os.time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
12.2 函数 os.date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
12.3 日期和时间处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
12.4 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
13 位和字节 135
13.1 位运算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
13.2 无符号整型数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
13.3 打包和解包二进制数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
13.4 二进制文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
13.5 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 14 数据结构 145
14.1 数组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
14.2 矩阵及多维数组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
14.3 链表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
14.4 队列及双端队列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
14.5 反向表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
14.6 集合与包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
14.7 字符串缓冲区 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
14.8 图形 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
14.9 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
15 数据文件和序列化 159
15.1 数据文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
15.2 序列化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
15.2.1 保存不带循环的表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
15.2.2 保存带有循环的表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
15.3 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
16 编译、执行和错误 171
16.1 编译 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
16.2 预编译的代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
16.3 错误 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
16.4 错误处理和异常 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
16.5 错误信息和栈回溯 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
16.6 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
17 模块和包 184
17.1 函数 require . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
17.1.1 模块重命名 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 17.1.2 搜索路径 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
17.1.3 搜索器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
17.2 Lua 语言中编写模块的基本方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
17.3 子模块和包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
17.4 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
第 3 部分 语言特性 196
18 迭代器和泛型 for 197
18.1 迭代器和闭包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
18.2 泛型 for 的语法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
18.3 无状态迭代器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
18.4 按顺序遍历表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
18.5 迭代器的真实含义 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
18.6 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
19 小插曲:马尔可夫链算法 208
19.1 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
20 元表和元方法 212
20.1 算术运算相关的元方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
20.2 关系运算相关的元方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
20.3 库定义相关的元方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
20.4 表相关的元方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
20.4.1 __index 元方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
20.4.2 __newindex 元方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
20.4.3 具有默认值的表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
20.4.4 跟踪对表的访问 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
20.4.5 只读的表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
20.5 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 21 面向对象(Object-Oriented)编程 226
21.1 类(Class) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
21.2 继承(Inheritance) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
21.3 多重继承(Multiple Inheritance) . . . . . . . . . . . . . . . . . . . . . . . . . . 232
21.4 私有性(Privacy) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
21.5 单方法对象(Single-method Object) . . . . . . . . . . . . . . . . . . . . . . . . 237
21.6 对偶表示(Dual Representation) . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
21.7 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
22 环境(Environment) 241
22.1 具有动态名称的全局变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
22.2 全局变量的声明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
22.3 非全局环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
22.4 使用 _ENV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
22.5 环境和模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
22.6 _ENV 和 load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
22.7 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
23 垃圾收集 255
23.1 弱引用表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
23.2 记忆函数(Memorize Function) . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
23.3 对象属性(Object Attribute) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
23.4 回顾具有默认值的表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
23.5 瞬表(Ephemeron Table) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
23.6 析构器(Finalizer) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
23.7 垃圾收集器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
23.8 控制垃圾收集的步长(Pace) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
23.9 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 24 协程(Coroutine) 270
24.1 协程基础 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
24.2 哪个协程占据主循环 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
24.3 将协程用作迭代器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
24.4 事件驱动式编程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
24.5 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
25 反射(Reflection) 285
25.1 自省机制(Introspective Facility) . . . . . . . . . . . . . . . . . . . . . . . . . . 286
25.1.1 访问局部变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
25.1.2 访问非局部变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
25.1.3 访问其他协程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
25.2 钩子(Hook) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
25.3 调优(Profile) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
25.4 沙盒(Sandbox) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
25.5 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
26 小插曲:使用协程实现多线程 301
26.1 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
第 4 部分 C 语言 API 307
27 C 语言 API 总览 308
27.1 第一个示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
27.2 栈 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
27.2.1 压入元素 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
27.2.2 查询元素 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
27.2.3 其他栈操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
27.3 使用 C API 进行错误处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 27.3.1 处理应用代码中的错误 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
27.3.2 处理库代码中的错误 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
27.4 内存分配 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
27.5 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
28 扩展应用 325
28.1 基础知识 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
28.2 操作表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
28.2.1 一些简便方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
28.3 调用 Lua 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
28.4 一个通用的调用函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
28.5 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
29 在 Lua 中调用 C 语言 339
29.1 C 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
29.2 延续(Continuation) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
29.3 C 模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
29.4 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
30 编写 C 函数的技巧 349
30.1 数组操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
30.2 字符串操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
30.3 在 C 函数中保存状态 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
30.3.1 注册表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
30.3.2 上值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
30.3.3 共享的上值(Shared upvalue) . . . . . . . . . . . . . . . . . . . . . . . . 361
30.4 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 31 C 语言中的用户自定义类型 363
31.1 用户数据(Userdata) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
31.2 元表(Metatable) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
31.3 面向对象访问 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
31.4 数组访问 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
31.5 轻量级用户数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
31.6 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
32 管理资源 376
32.1 目录迭代器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
32.2 XML 解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
32.3 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
33 线程和状态 392
33.1 多线程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
33.2 Lua 状态 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
33.3 练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406