第一版是針對 Lua 5.0 編寫的。雖然在很大程度上仍然適用於後續版本,但仍有一些差異。
第四版針對 Lua 5.3,可在 Amazon 和其他書店購買。
購買這本書,您也可以幫助 支援 Lua 專案


第 29 章 – 管理資源

在前一章中實作陣列時,我們不需要擔心管理資源。它們只需要記憶體。代表陣列的每個使用者資料都有自己的記憶體,由 Lua 管理。當陣列變成垃圾(也就是程式無法存取)時,Lua 最終會收集它並釋放其記憶體。

生活並非總是如此輕鬆。有時候,物件需要除了原始記憶體之外的其他資源,例如檔案描述符、視窗控制代碼等。(通常這些資源也僅是記憶體,但由系統的其他部分管理)。在這種情況下,當物件變成垃圾並被收集時,也必須以某種方式釋放那些其他資源。多種物件導向語言提供特定機制(稱為「完成處理函式」或「解構函式」)來滿足此需求。Lua 以 __gc 元方法的形式提供完成處理函式。此元方法僅適用於使用者資料值。當使用者資料即將被收集,且其元資料表具有 __gc 欄位時,Lua 會呼叫此欄位的數值(應該是函式),並傳遞使用者資料本身作為引數。然後,此函式可以釋放與該使用者資料關聯的任何資源。

為了說明此元方法和整體 API 的用法,我們將在本章中開發兩個從 Lua 到外部設施的繫結。第一個範例是另一個用於瀏覽目錄的函式實作。第二個(也是更重要的)範例是繫結到 Expat,一個開放原始碼的 XML 解析器。