0基礎lua學習(十四)封裝
People = {age=18}
function People:new()
print(type(self))
local p = {}
setmetatable(p,self)
print(p)
print(self)
self.__index = self
return p
end
function People:growup()
self.age = self.age +1
print(self.age)
end
--物件p1
p1 = People:new()
p1:growup()
p1:growup()
--物件p2
p2 = People:new()
p2:growup()
console:
19
20
19
分析:p1和p2是 完全獨立的兩個物件
print(type(self))不難發現,我們的self其實是一個table
self.__index = self做的其實就是,把p的元表設定為 People
小結:
print(type(self)),發現我們的self其實是一個table
People = {age=18}
function People:new()
local p = {}
setmetatable(p,self)
self.__index = self
print(self)
return p
end
function People:growup()
self.age = self.age +1
end
--物件p1
print(People)
print("-------------")
p1 = People:new()
print(p1)
p2 = People:new()
print(p2)
table: 0027B520
table: 0027B520
table: 0027B638
table: 0027B520
table: 0027B6B0
分析:
我們people的列印,和self列印是一樣的。
我的理解是people這個表,裡面存著new方法/age屬性/growup方法。
但是p2和p1之所以是兩個物件的原因是,
self.__index = self。
設定 local p表的元表為people,並且p會擁有自己的people元表。
也就是p1和p2 各自有一個元表people,互相獨立。
讓我們看這個方法:
__index 元方法這是 metatable 最常用的鍵。
Lua查詢一個表元素時的規則,其實就是如下3個步驟:
1.在表中查詢,如果找到,返回該元素,找不到則繼續
2.判斷該表是否有元表,如果沒有元表,返回nil,有元表則繼續。
3.判斷元表有沒有__index方法,如果__index方法為nil,則返回nil;如果__index方法是一個表,則重複1、2、3 如果__index方法是一個函式,則返回該函式的返回值(table和鍵會作為引數傳遞給函式)。
setmetatable 其實就是設定 元表物件
相關文章
- lua list 封裝封裝
- lua學習之入門(二)----基礎語法1
- 0基礎學怎麼學習python?Python
- 0基礎能否學會Python?如何學習?Python
- 0基礎新手該如何學習Python?學習技巧!Python
- 1、Lua 基礎
- lua 基礎 1
- 0基礎新手該如何學習Python?分享學習技巧!Python
- Java學習-封裝Java封裝
- java基礎private/封裝篇Java封裝
- salesforce零基礎學習(一百二十四)Postman 使用SalesforcePostman
- 入行IT界,0基礎如何學習大資料?大資料
- 0基礎小白如何學習Python技術?Python
- 0基礎學習php、前端還是python?PHP前端Python
- 0基礎學習Python,需掌握哪些方法?Python
- 0基礎該不該學習Python?適合學習嗎?Python
- 0基礎怎麼學習Python?Python學習方法彙總!Python
- Java新手學習路線,0基礎學習Java怎樣效率更高?Java
- 0基礎學習Python該如何入門?Python學習方法!Python
- Java基礎04 封裝與介面Java封裝
- 靜態PDO基礎操作封裝封裝
- JS 基礎篇(十) cookie封裝JSCookie封裝
- Python零基礎學習筆記(二十四)——函式Python筆記函式
- 0基礎學如何學web前端?Web前端
- Redis基礎知識(學習筆記21--Lua 指令碼語言)Redis筆記指令碼
- 視覺 SLAM 十四講-基礎數學篇視覺SLAM
- LUA的基礎知識
- FlatList元件學習和封裝元件封裝
- Redis基礎知識(學習筆記21--Lua 指令碼語言2)Redis筆記指令碼
- 0基礎能學習Linux運維嗎?Linux初學Linux運維
- Java基礎知識篇02——封裝Java封裝
- 0基礎,如何快速學習自媒體,詳細教程
- 0基礎學GUI,先從基礎開始1GUI
- 0基礎學網路安全需要什麼基礎?
- python基礎學習12—-裝飾器Python
- LUA基礎: TABLE, ARRAY, NAMESPACE, LUA的物件導向namespace物件
- javascript基礎(函式)(十四)JavaScript函式
- 免殺學習-基礎學習