Lua面向對象之一:簡單例子


1.Lua面向對象實現步驟

①創建一個全局表(稱之為元表)

②設置這個元表的__index值(值通常為元表自己,這樣就能通過__index查找到對應的屬性和方法)

__index 賦值其實是一個function的語法糖,Sharp.__index = Sharp等價於Sharp.__index = function(key) return Sharp[key] end 

 

③新建一個表,使用setmetatable方法將元表設置到這個新表中,那這個新表就能以對象的方式來調用對應的屬性和方法了

當這個對象調用屬性或者函數時,首先查找自身的元表,如果找到則返回;如果沒找到,則檢查元表中是否有__index,如果有,則使用__index的值繼續查找,直到沒有__index為止。

其實這個過程和C++中的代碼流程是完全一致的(多了將對應方法設置到元表中的過程)具體可參看《Lua和C++交互 學習記錄之九:在Lua中以面向對象的方式使用C++注冊的類

 

2.例子

①代碼 

Sharp = { _val = 1}  --① 父類

function Sharp:new() local new_sharp = { } self.__index = self  --②,self == Sharp
    setmetatable(new_sharp, self)  --

    return new_sharp end

function Sharp:sharp_func() print("Sharp call sharp_func") end

function Sharp:name() print("Sharp call name") end

function Sharp:val() print(string.format("Sharp call val %d", self._val)) end

 

②調用代碼

local sharp = Sharp:new() sharp:sharp_func() sharp:name() sharp:val()

 

③輸出結果

 

Lua面向對象:

Lua面向對象之一:簡單例子

Lua面向對象之二:類繼承

Lua面向對象之三:其它一些嘗試


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM