第 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
· · · · · · (
收起)