第1章 开始 3
1.1程序块(chunk) 3
1.2词法规范 5
1.3全局变量 6
1.4解释器程序(thedtand-sloneinterpreter) 7
第2章 类型与值 9
2.1nil(空) 10
2.2boolean(布尔) 10
2.3number(数字) 10
2.4string(字符串) 11
2.5table(表) 14
2.6function(函数) 17
2.7userdata(自定义类型)和thread(线程) 18
第3章 表达式 19
3.1算术操作符 19
3.2关系操作符 20
3.3逻辑操作符 20
3.4字符串连接 22
3.5优先级 22
3.6table构造式(tableconstructor) 23
第4章 语句 27
4.1赋值 27
4.2局部变量与块(block) 28
4.3控制结构 30
4.3.1ifthenelse 30
4.3.2while 31
4.3.3repeat 31
4.3.4数字型for(numericfor) 31
4.3.5泛型for(genericfor) 32
4.4break与return 34
第5章 函数 35
5.1多重返回值(multipleresults) 36
5.2变长参数(variablenumberofarguments) 39
5.3具名实参(namedarguments) 42
第6章 深入函数 45
6.1closure(闭合函数) 47
6.2非全局的函数(non-globalfunction) 50
6.3正确的尾调用(propertailcall) 52
第7章 迭代器与泛型for 55
7.1迭代器与closure 55
7.2泛型for的语义 57
7.3无状态的迭代器 58
7.4具有复杂状态的迭代器 60
7.5真正的迭代器 61
第8章 编译、执行与错误 63
8.1编译 63
8.2C代码 66
8.3错误(error) 67
8.4错误处理与异常 69
8.5错误消息与追溯(traceback) 70
第9章 协同程序(coroutine) 73
9.1协同程序基础 73
9.2管道(pipe)与过滤器(filter) 76
9.3以协同程序实现迭代器 78
9.4非抢先式的(non-preemptive)多线程 81
第10章 完整的示例 87
10.1数据描述 87
10.2马尔可夫链(markovchain)算法 90
第11章 数据结构 95
11.1数组 95
11.2矩阵与多维数组 96
11.3链表 97
11.4队列与双向队列 98
11.5集合与无序组(bag) 99
11.6字符串缓冲 100
11.7图 102
第12章 数据文件与持久性 105
12.1数据文件 105
12.2串行化(Serialization) 107
12.2.1保存无环的table 109
12.2.2保存有环的table 110
第13章 元表(metatable)与元方法(meatmethod) 113
13.1算术类的元方法 114
13.2关系类的元方法 116
13.3库定义的元方法 117
13.4table访问的元方法 118
13.4.1_index元方法 118
13.4.2__newindex元方法 120
13.4.3具有默认值的table 120
13.4.4跟踪table的访问 121
13.4.5只读的table 123
第14章 环境 125
14.1具有动态名字的全局变量 125
14.2全局变量声明 127
14.3非全局的环境 129
第15章 模块与包 133
15.1require函数 134
15.2编写模块的基本方法 136
15.3使用环境 138
15.4module函数 140
15.5子模块与包 141
第16章 面向对象编程 143
16.1类 144
16.2继承 146
16.3多重继承 148
16.4私密性 150
16.5单一方法(single-method)做法 152
第17章 弱引用table 153
17.1备忘录(memoize)函数 154
17.2对象属性 156
17.3回顾table的默认值 157
第18章 数学库 161
第19章 table库 163
19.1插入和删除 163
19.2排序 163
19.3连接 165
第20章 字符串库 167
20.1基础字符串函数 167
20.2模式匹配(pattern-matching)函数 169
20.2.1string.find函数 169
20.2.2string.match函数 170
20.2.3string.gsub函数 170
20.2.4string.gmatch函数 171
20.3模式 172
20.4捕获(capture) 175
20.5替换 177
20.5.1URL编码 178
20.5.2tab扩展 180
20.6技巧 181
第21章 I/O库 185
21.1简单I/O模型 185
21.2完整I/O模型 188
21.2.1性能小诀窍 189
21.2.2二进制文件 190
21.2.3其他文件操作 192
第22章 操作系统库 193
22.1日期和时间 193
22.2其他系统调用 195
第23章 调试库 197
23.1自省机制 197
23.1.1访问局部变量 199
23.1.2访问非局部的变量(non-localvarible) 200
23.1.3访问其他协同程序 201
23.2钩子 202
23.3性能剖析(profile) 202
第24章 CAPI概述 207
24.1第一个示例 208
24.2栈 210
24.2.1压入元素 211
24.2.2查询元素 212
24.2.3其他栈操作 214
24.3CAPI中的错误处理 215
24.3.1应用程序代码中的错误处理 216
24.3.2库代码中的错误处理 216
第25章 扩展应用程序 219
25.1基础 219
25.2table操作 220
25.3调用Lua函数 224
25.4一个通用的调用函数 226
第26章 从Lua调用C 229
26.1C函数 229
26.2C模块 231
第27章 编写C函数的技术 233
27.1数组操作 233
27.2字符串操作 234
27.3在C函数中保存状态 237
27.3.1注册表(registry) 237
27.3.2C函数的环境 239
27.3.3upvalue 239
第28章 用户自定义类型 243
28.1userdata 243
28.2元表 246
28.3面向对象的访问 248
28.4数组访问 250
28.5轻量级userdata(lightuserdata) 251
第29章 管理资源 253
29.1目录迭代器 253
29.2XML分析器 256
第30章 线程和状态 265
30.1多个线程 265
30.2Lua状态 269
第31章 内存管理 277
31.1分配函数 277
31.2垃圾收集器 279
31.2.1原子操作 280
31.2.2垃圾收集器的API 280