lua中的物件導向

2021-07-22 11:42:46 字數 2534 閱讀 3220

lua中是通過元表來物件導向的,下面就lua物件導向做一下說明:

local account = 

function

account:new(o) -- 這裡是冒號哦

o = o or {} -- 如果使用者沒有提供table,則建立乙個

setmetatable(o, self)

self.__index = self

return o

endfunction

account:display()

self.value = self.value + 100

print(self.value)

endlocal

a = account:new{} -- 這裡使用原型account建立了乙個物件a

a:display() --(1)

a:display() --(2)

在account表中有乙個value欄位,預設值為0;當我建立了例項物件a時,並沒有提供value欄位,在display函式中,由於a中沒有value欄位,就會查詢元表account,最終得到了account中value的值,等號右邊的self.value的值就**自account中的value

繼承:

local person = 

function

person:new

(o) o = o or {}

setmetatable(o, self)

self.__index = self

return o

endfunction

person:display

() print(self.name)

endfunction

person:addage

(v) self.age = self.age + v

end

學生類

local student = person:new()  --student類繼承自person類

function

student:display

() print(self.name,self.id)

end

多重繼承:

-- 在多個父類中查詢欄位k

local

function

parent

(k, pparentlist)

for i = 1, #pparentlist do

local v = pparentlist[i][k]

if v then

return v

endendend

function

class

(...)

local c = {} -- 新類

local parents =

-- 類在其元表中搜尋方法

setmetatable(c, ) --多重繼承就是可以在多個類中去尋找方法

-- 將c作為其實例的元表

c.__index = c

-- 為這個新類建立乙個新的建構函式

function

c:new

(o) o = o or {}

setmetatable(o, self)

-- self.__index = self 這裡不用設定了,在上面已經設定了c.__index = c

return o

end-- 返回新的類(原型)

return c

end-- 乙個簡單的類ca

local ca = {}

function

ca:new

(o) o = o or {}

setmetatable(o, )

self.__index = self

return o

endfunction

ca:setname

(strname)

self.name = strname

end-- 乙個簡單的類cb

local cb = {}

function

cb:new

(o) o = o or {}

setmetatable(o, self)

self.__index = self

return o

endfunction

cb:getname

() return self.name

end-- 建立乙個c類,它的父類是ca和cb

local c = class(ca, cb)

-- 使用c類建立乙個例項物件

local objectc = c:new

-- 設定objectc物件乙個新的名字

objectc:setname("jellythink")

local newname = objectc:getname()

print(newname)

Lua中「 」以及 物件導向

閱讀本文需要理解前一篇文章lua中的元方法 當通過 呼叫時,系統會自動傳遞當前的table給self,例如a.eat a 相當於a eat 傳遞當前物件給eat方法,這樣就提高了table的方法的擴充套件性了。本質是使用table進行模擬 定義空表,相當於是乙個類 person 定義區域性表引用變數...

解說Lua中的物件導向

物件導向不是針對某一門語言,而是一種思想,在面向過程的語言也可以使用物件導向的思想來進行程式設計。在lua中,並沒有物件導向的概念存在,沒有類的定義和子類的定義,但同樣在lua中可以利用物件導向的思想來實現物件導向的類繼承。一 複製表的方式物件導向 lua中的物件導向 複製表方式物件導向 引數為一張...

Lua的物件導向

index元方法用來對錶訪問,newindex元方法用來對錶更新 當通過鍵來訪問table的時候,如果這個鍵沒有值,那麼lua就會尋找該table的metatable 如果有metatable 中的 index鍵。如果 index指向乙個 lua會在 中查詢相應的鍵,如果 index指向乙個函式,l...