lua的self


lua中self指的是當前方法所屬的table。一般來講self可以理解為當前對象,但是在創建一個“類”的實例的時候,它代表的確是基類,而非當前對象。

下面上代碼:

 1 base = {}
 2 
 3 function base:new(id)
 4     local o = {}
 5     setmetatable(o, self)
 6     self.__index = self
 7     self.gg= id                   ------------此處的self指的是base這個table,而不是你新創建的o。此處對self的操作,會影響其他實例。因為base被改變了
 8     return o
 9 end
10 
11 function base:add(v)
12     self.gg = v                  -------------此處self指的是當前實例,即new方法中的o,而不是base
13 end
14 
15 a1 = base:new(12)
16 a2 = base:new(4)    -------修改了所有以base為metatable的實例(table)
17 
18 print(a1.gg)  -- 這里顯示的是4,如果把new方法中的self.gg=id改為 o.gg=id,那么此處顯示12
19 a2:add(13)
20 print(a1.gg)  -- 由於add方法修改的self是當前實例,而不是base,因此a2的add方法,不會影響a1
21 print(a2.gg)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM