Lua 程序設計, 4/e (Programming in Lua, 4/e)

羅伯拖·魯薩利姆斯奇 (Roberto Ierusalimschy)

買這商品的人也買了...

商品描述

本書由 Lua 語言作者親自撰寫,針對 Lua 語言本身由淺入深地從各個方面進行了完整和細致的講解。作為第 4 版,本書主要針對的是 Lua 5.3,這是本書撰寫時 Lua 語言的最新版本。作者從語言使用者的角度出發,講解了語言基礎、編程實操、高級特性及 C 語言 API 等四個方面的內容,既有 Lua 語言基本數據類型、輸入輸出、控制結構等基礎知識,也有對模塊、閉包、元表、協程、延續、反射、環境、垃圾回收、函數式編程、面向對象編程、C 語言 API 等高級特性的系統講解,還有對 Lua 5.3 中引入的整型、位運算、瞬表、延續等新功能的細致說明。

作者簡介

作者:(巴西)Roberto Ierusalimschy(羅伯拖?魯薩利姆斯奇)譯者:梅隆魁
Roberto Ierusalimschy是Lua語言的首席架構師,從1993年Lua語言誕生起即進行Lua語言的開發工作,目前是巴西PUC-Rio(the Pontifical Catholic University of Rio de Janeiro)大學計算機科學專業的一名助理教授,主要從事編程語言的設計和實現工作。
梅隆魁,2013.4至今就職於中國民生銀行總行信息科技部,擅長於Java企業級開發、嵌入式系統/軟硬件、安卓逆向等方向,同時,對新技術也一直保有熱情。

目錄大綱

第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