解說Lua中的物件導向

2021-10-24 06:20:42 字數 2217 閱讀 8496

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

一、複製表的方式物件導向

–lua中的物件導向

複製表方式物件導向

引數為一張表,通過遍歷這張表取值,賦給一張空表,最後返回新建的表,來達到轉殖表

function clone(tab)

local ins = {}

for key, var in pairs(tab) do

ins[key] = var

endreturn ins

end複製表

第一引數是目標表,第二個引數是需要複製的表

通過遍歷tab來取值將它賦值到目標表中

function copy(dist,tab)

for key, var in pairs(tab) do

dist[key] = var

endend

— 定義一張空表,相當於乙個類

people ={}

–function people.sayhi()

— print(「people say hi」)

–end

— 定義類中的方法sayhi,傳入乙個self引數

people.sayhi = function (self)

print(「people say hi:」..self.name)

end— 定義乙個new方法,傳進乙個name引數,通過轉殖people這張表來生成乙個物件

— 相當於類當中的乙個構造方法

people.new = function (name)

local self = clone(people)

self.name = name

return self

end–local p = clone(people)

–p.sayhi()

–生成乙個新的物件

local p = people.new(「zhangsan」)

–p.sayhi(p)

–p:sayhi()

–定義一張空表,也代表乙個類

man = {}

–man中的構造方法,實現lua中類的繼承

man.new = function (name)

local self = people.new(name)

–附加man中所有的鍵值對到people中的例項中去

copy(self,man)

return self

endman.sayhello = function ()

print(「man say hello」)

end–重寫父類people中的sayhi方法

man.sayhi = function (self)

print(「man sayhi 「..self.name)

end–建立man的乙個例項

local m = man.new(「lisi」)

m:sayhi()

二、使用函式閉包的形式實現物件導向

–以函式閉包的形式實現物件導向

–定義乙個方法,函式閉包實現乙個類的概念

function people(name)

local self = {}

–初始化方法,私有的

local function init()

self.name = name

endself.sayhi = function ()

print(「hello 「..self.name)

end–呼叫初始化

init()

return self

end–例項化乙個物件

local p = people(「zhangsan」)

p:sayhi()

–函式閉包的形式實現類繼承

function man(name)

local self = people(name)

— local function init()

— end

self.sayhello = function ()

print(「hi 「..self.name)

endreturn self

endlocal m = man(「lisi」)

–m:sayhello()

m:sayhi()

lua中的物件導向

lua中是通過元表來物件導向的,下面就lua物件導向做一下說明 local account function account new o 這裡是冒號哦 o o or 如果使用者沒有提供table,則建立乙個 setmetatable o,self self.index self return o e...

Lua中「 」以及 物件導向

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

Lua的物件導向

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