Blitz Lua Keeper |
|
BlitzLua 是用 BlitzMAX 寫成的 Lua 執行環境,BlitzMAX 是一種用於 Windows 98/ME/2000/XP、MacOS X 與 Linux 的跨平台 BASIC 編譯器和執行時期系統。BlitzMAX 物件會以「輕量使用者資料」傳遞到 Lua,而透過傳遞函式的方式來操作這些物件 (使用基礎物件作為函式的第一個參數),而不是使用「方法」。基礎「函式介面」上方會有一個額外圖層,用來將任何 BlitzMAX 物件直接對應到相對應的 Lua 表格。透過「守護程式」,此類表格可以在 Lua 垃圾收集器準備移除該表格時,執行最後的「整理維護」作業 (例如,明確移除相關的 BlitzMAX 物件)。
「守護程式」實作在 [Lua FaQ] 中描述的一種機制,用來解答「為什麼 __gc 後設方法無法在表格上運作?」
blitzmax.newKeeper(LuaTable)
,會建立一個新的 (完整) 使用者資料物件,並使用指定的 LuaTable
作為它的環境LuaTable
應該儲存一個參照給新的「守護程式」,並儲存在欄位「_Keeper」中 (開頭底線加上大寫「K」)LuaTable
和「守護程式」現在會彼此參照對方,而 Lua 中不應有任何其他參照指向「守護程式」。只要 LuaTable
沒有被其「守護程式」以外的物件參照,Lua 垃圾收集器便會開始收集這兩個物件
LuaTable
是否仍在使用此使用者資料作為它的「守護程式」 (如果不是,則會靜默中斷)。接著,它會在 LuaTable
中尋找欄位「destroy」 (應存放一個 Lua 函式),並以 LuaTable
作為第一個且唯一的引數來呼叫它現在,毀滅函式可以執行任何必要的作業來清理 LuaTable
和它相關的 BlitzMAX 物件。當毀滅函式完成 (或失敗) 時,Lua 垃圾收集器會將這兩個物件移除。