記錄學習過程
建立日期: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...