Lua 物件導向

2021-09-18 05:06:35 字數 1914 閱讀 4565

記錄學習過程

建立日期:2019-04-14

物件由屬性和方法組成。lua中最基本的結構是table,所以需要用table來描述物件的屬性。

lua 中的 function 可以用來表示方法。那麼lua中的類可以通過 table + function 模擬出來。

乙個簡單的物件導向例子

--屬性

person =

--方法

person.eat =

function()

print

(person.name.

."在吃飯"

)end--[

[--第二種實現方法的方式

function person.

eat(

)print

(person.name.

."在吃飯"

)end--]

]person.

eat(

)

這時候有個問題就是當我們把person賦值給person2,再將person賦值為nil時,通過person2,eat()是無法訪問的,因為eat()已經指定了person物件,所以需要另一種方式實現方法,通過冒號:來實現方法

function person:

eat(

)print

(self.name.

."在吃飯"

)end

person:

eat(

)

當通過:呼叫方法時,系統會自動傳遞當前的table給self,

當通過.呼叫方法時,self不會自動賦值,我們必須通過第乙個引數來傳遞當前的table

person:

eat(

)person.

eat(person)

到這裡,我們還是無法實現類生產物件,這時候可以通過元表實現

建立乙個person類

person =

function person:

eat(

)print

(self.name.

."在吃飯"

)end

function person:

new(o)

local t= o or

setmetatable

(t,)

--呼叫乙個屬性的時候,如果t中不存在,那麼會在__index 所指定的table中查詢

--setmetatable

(t,self)

--或 --self.__index=self

return t

end

例項化

person1= person:

new(

)person1.name =

"haha1"

person2= person:

new(

)person2.name =

"haha2"

print

(person1.name)

--haha1

print

(person2.name)

--haha2

繼承

建立乙個student類

student = person:

new(

)student.grade=

1--例項化物件

stu1 = student:

new(

)stu1:

eat(

)print

(stu1.grade)

--1

lua物件導向

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

Lua 物件導向

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

Lua 物件導向

物件導向 組成 成員變數 成員函式 要求 每個物件,由類生成,有自己的成員變數 使用共同的成員函式 lua構造物件導向 原理用table表示成員變數 用function表示成員函式 用metatable關聯物件和類 實現1 空類 2 class 34 指向自己 5 class.index class...