物件導向不是針對某一門語言,而是一種思想,在面向過程的語言也可以使用物件導向的思想來進行程式設計。在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...