第一版是為 Lua 5.0 所寫。儘管對後續版本仍有很大的關聯性,但還是有一些差異。
第四版針對 Lua 5.3,可在 Amazon 和其他書店購買。
購買本書,您也能協助支援 Lua 專案


27.3 – 在 C 函式中儲存狀態

C 函式經常需要保留一些非本機資料,也就是會在呼叫後持續存在的資料。在 C 中,我們通常會使用全域或靜態變數來滿足這個需求。不過,當您為 Lua 撰寫函式庫函式時,全域和靜態變數並非良好的做法。首先,您無法將一般 Lua 值儲存在 C 變數中。其次,使用此類變數的函式庫無法用於多個 Lua 狀態。

另一種做法是將此類值儲存在 Lua 全域變數中。這種做法解決了前兩個問題。Lua 全域變數會儲存任何 Lua 值,而且每個獨立狀態都有自己獨立的全域變數組。不過,這並不總是令人滿意的解決方案,因為 Lua 程式碼可以竄改這些全域變數,進而危害 C 資料的完整性。為避免這個問題,Lua 提供了一個稱為註冊表的獨立表格,C 程式碼可以自由使用,但 Lua 程式碼無法存取。