Blitz Lua 物件介面 |
|
「物件介面」將 BlitzMAX 類型直接對應到相對應的 Lua「類別」,亦即一個附有對應元表的表格。給定 BlitzMAX 模組的所有類型都存在於一個 Lua 表格中,其名稱即為基礎模組的名稱:例如,在 Lua 中,在模組 BRL.MaxGUI
中找到的 BlitzMAX 類型 TGadget
會由 brl.maxgui.TGadget
複製(其中 brl
是全域表格)。「import
」機制可選擇性將給定模組的所有類型設為全域,不需要再以其模組名稱為其加前綴。
命名慣例
由於 Lua 是大小寫敏感語言(不同於 BlitzMAX),因此套用下列命名慣例
有任何不確定性,請考慮類型參考,它是套件的一部分。
參數處理與類型轉換
Lua 函數參數等於對應 BlitzMAX 方法的參數,任何預設值會受到適當考量(亦即,對應的 Lua 參數可能是 nil
)。類型會轉換如下
boolean
」類型string
」類型此外
值得注意的細節:當「功能介面」傳遞 BlitzMAX 物件作為「輕量使用者資料」時,「物件介面」僅適用於 Lua「物件」。因此,介面會實作一種搜尋技術以取得指定 BlitzMax 物件的 Lua 表格,反之亦然
_Peer
」的欄位,其中包含指向底層 BlitzMAX 物件的「參考」(請勿修改此欄位!因此,傳遞至 BlitzMAX 函式的即是「_Peer
」,而從 BlitzMAX 回傳的每個物件都會被搜尋並以其關聯 Lua 表格取代(如果存在此種表格,否則會「立即」建立一個新的表格)
任何 BlitzMAX 常數也會在定義模組所屬的表格中提供 - 其名稱一律使用大寫字母(例如 brl.event.EVENT_WINDOWCLOSE
),就像在 BlitzMAX 中一樣。
物件介面的部分詳細說明
介面「類別」提供基於原型差異的繼承(實際上,這表示修改「類別」會立即影響其所有實體,除非修改的欄位由實體「遮蔽」)。此外,它們管理其「_Peer
」的壽命:使用「管理員」(請參閱 BlitzLuaKeeper),每個 Lua「物件」都會在垃圾回收器將其從記憶體中移除時收到通知。然後,它會呼叫其 destroy
方法,適當關閉並移除相關 BlitzMAX 同級項目。
同時使用「功能介面」和「物件介面」時,除非你真的知道自己在做什麼,否則不應混合處理 BlitzMAX 物件的函式和 Lua「方法」。不過,使用不處理特定物件的其他函式(不會處理特定物件)是安全的(而且通常是必要的)
與「功能介面」相比,「物件介面」允許使用物件導向標籤,並讓程式設計人員免除自行管理 BlitzMAX 物件的負擔。
「物件介面」尚未完成,但預計將於 2007 年 5 月 18 日左右發佈。