Lua 物件導向

2022-09-11 16:51:23 字數 4306 閱讀 8819

我們知道,物件由屬性和方法組成。lua中最基本的結構是table,所以需要用table來描述物件的屬性。lua 中的 function 可以用來表示方法。那麼lua中的類可以通過 table + function 模擬出來。至於繼承,可以通過 metetable 模擬出來。 

lua 中的表不僅在某種意義上是一種物件。像物件一樣,表也有狀態(成員變數);也有與物件的值獨立的本性,特別是擁有兩個不同值的物件(table)代表兩個不同的物件;乙個物件在不同的時候也可以有不同的值,但他始終是乙個物件;與物件類似,表的生命週期與其由什麼建立、在哪建立沒有關係。物件有他們的成員函式,表也有。

account = 

function

account.withdraw (v)

account.balance = account.balance -v

end

這個定義建立了乙個新的函式,並且儲存在account物件的withdraw域內,下面我們可以這樣呼叫:

account.withdraw(100.00)

以下簡單的類包含了三個屬性: area, length 和 breadth,printarea方法用於列印計算結果:

--

元類rectangle =

--派生類的方法 new

function

rectangle:new (o,length,breadth)

o = o or

{}

setmetatable

(o, self)

self.__index =self

self.length = length or

0self.breadth = breadth or

0self.area = length*breadth;

return

oend

--派生類的方法 printarea

function

rectangle:printarea ()

print("

矩形面積為

",self.area)

end

建立物件是為類的例項分配記憶體的過程。每個類都有屬於自己的記憶體並共享公共資料。

r = rectangle:new(nil,10,20)

訪問屬性

我們可以使用點號(.)來訪問類的屬性:

print(r.length)

訪問成員函式

我們可以使用冒號 : 來訪問類的成員函式:

r:printarea()

內存在物件初始化時分配。以下是lua 物件導向的完整**:

--

元類shape =

--基礎類方法 new

function

shape:new (o,side)

o = o or

{}

setmetatable

(o, self)

self.__index =self

side = side or

0self.area = side*side;

return

oend

--基礎類方法 printarea

function

shape:printarea ()

print("

面積為

",self.area)

end--

建立物件

myshape = shape:new(nil,10

)myshape:printarea()

執行以上程式,輸出結果為:

面積為100

繼承是指乙個物件直接使用另一物件的屬性和方法。可用於擴充套件基礎類的屬性和方法。

--

meta class

shape =

--基礎類方法 new

function

shape:new (o,side)

o = o or

{}

setmetatable

(o, self)

self.__index =self

side = side or

0self.area = side*side;

return

oend

--基礎類方法 printarea

function

shape:printarea ()

print("

面積為

",self.area)

end

接下來,square 物件繼承了 shape 類:

square =shape:new()

--derived class method new

function

square:new (o,side)

o = o or

shape:new(o,side)

setmetatable

(o, self)

self.__index =self

return

oend

以下例項我們繼承了乙個簡單的類,來擴充套件派生類的方法,派生類中保留了繼承類的成員變數和方法:

--

meta class

shape =

--基礎類方法 new

function

shape:new (o,side)

o = o or

{}

setmetatable

(o, self)

self.__index =self

side = side or

0self.area = side*side;

return

oend

--基礎類方法 printarea

function

shape:printarea ()

print("

面積為

",self.area)

end--

建立物件

myshape = shape:new(nil,10

)myshape:printarea()

square =shape:new()

--派生類方法 new

function

square:new (o,side)

o = o or

shape:new(o,side)

setmetatable

(o, self)

self.__index =self

return

oend

--派生類方法 printarea

function

square:printarea ()

print("

正方形面積為

",self.area)

end--

建立物件

mysquare = square:new(nil,10

)mysquare:printarea()

rectangle =shape:new()

--派生類方法 new

function

rectangle:new (o,length,breadth)

o = o or

shape:new(o)

setmetatable

(o, self)

self.__index =self

self.area = length *breadth

return

oend

--派生類方法 printarea

function

rectangle:printarea ()

print("

矩形面積為

",self.area)

end--

建立物件

myrectangle = rectangle:new(nil,10,20

)myrectangle:printarea()

執行以上**,輸出結果為:

面積為100正方形面積為100矩形面積為200

lua 中可以重寫基礎類的函式,在派生類中定義自己的實現方式:

--

派生類方法 printarea

function

square:printarea ()

print("

正方形面積

",self.area)

end

lua物件導向

直接貼 參考的也是別人的,只不過其中幾點,增加一點自己的理解 local baseclass print baseclass是 tostring baseclass 定義index屬性,指向本身 baseclass.index baseclass 定義建構函式 function baseclass ...

Lua 物件導向

記錄學習過程 建立日期 2019 04 14 物件由屬性和方法組成。lua中最基本的結構是table,所以需要用table來描述物件的屬性。lua 中的 function 可以用來表示方法。那麼lua中的類可以通過 table function 模擬出來。乙個簡單的物件導向例子 屬性 person ...

Lua 物件導向

我們知道,物件由屬性和方法組成。lua中最基本的結構是table,所以需要用table來描述物件的屬性。lua中的function可以用來表示方法。那麼lua中的類可以通過table function模擬出來。至於繼承,可以通過metetable模擬出來 不推薦用,只模擬最基本的物件大部分夠用了 l...