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...