當有乙個表為a
我們讓b = a,
則b指向和a相同的表的記憶體
我們修改b[1],則a[1]也變了
我們令a=nil,則僅僅是說a指向空
但那個表還在,
故b仍然可用。
當b =nil時, 則已經找不到這個表了
但是其記憶體依然占用著
(因為已經無變數指向,故該記憶體屬於洩露記憶體
可以用collectgarbage("collect") 進行**
用collectgarbage("count")檢查記憶體佔用率
實際上,可以設定乙個單步收集器,即每隔x步,自動進行無用記憶體的**
"restart"、「setpause」、「setstepmul」、「step」、「stop」等執行)
table方法
table.concat(表,連線符,起始點,終止點)
則把表中元素用連線符連線起來,成為字串
注意,只能是對應1、2、3這種索引
a="d"這種索引是不可連線的
table.insert(表, 【插入位置】, "插入元素"), 預設為最後乙個插入
table.remove(表, 【刪除位置】) , 預設為最後乙個刪除
table.sort(表)
獲取table長度時, #表 和 table.getn(表) 都會在索引中斷的地方停止計數
正確計算長度應該用pairs遍歷,去計算長度。
元表指 為 table新增一些功能或者設定一些新功能
例如給某個table設定元表後
我們就可以給他 設定一些預設值,或者可以設定表1+表2
mytable = setmetatable(普通表, 元表)
則mytable就是普通表附加了元表的功能
呼叫getmetatable(mytable)後,可以返回對應的元表
常用的元方法:
_index,指找不到表中元素時,可以去這裡找例如t
=setmetatable(,)
則t中有3個索引1、2、3,對應值為1、2、3
當我們想要找4時,就去index裡找
index也可以指向乙個函式__index = function(mytable, key) end
lua查詢乙個表元素時的規則,其實就是如下3個步驟:
1.在表中查詢,如果找到,返回該元素,找不到則繼續
2.判斷該錶是否有元表,如果沒有元表,返回nil,有元表則繼續。
3.判斷元表有沒有__index方法,如果__index方法為nil,則返回nil;如果__index方法是乙個表,則重複1、2、3;如果__index方法是乙個函式,則返回該函式的返回值。
_newindex, 用於賦值,當對乙個不存在的鍵賦值時,則呼叫這個函式或者賦值到newindex對應的新錶中,而不是直接就賦值了。
__add __sub __mul __div __mod __unm __concat __eq __lt __ le 則為表設定運算子
mytable = setmtatable(, )
__call, 則可以把表當函式,傳入引數並計算
mytable = setmetatable(,
__call = function(mytable , 引數)
balbal
return 結果
)則我們可以執行 matable(引數)去獲得乙個值
__tostring元方法
修改表的輸出行為。即print行為
__tostring = function(mytable)
balbalbal
return ***
則print(mytable) 則輸出***
Lua元表和元表方法
今天學習lua中的元表,書上講的太難懂了,網上搜尋教程也將的模模糊糊,搜了一會總結了一下經驗,跟大家分享一下,希望對您有所幫助。如何設定元表?local t local mt getmetatable t nil setmetatable t,mt 將t1設定為t的元表 getmetatable t...
LUA 元表學習筆記1
最近學習lua學習到元表這一塊,發現有點迷糊 於是查閱了一部分資料反覆敲 論證,記錄一下結果 因為自己也是菜鳥並不保證完全正確,這僅僅是我個人的理解 首先設定原表 普通表 t 元表 mt 把 mt 設為 t 的元表 setmetatable t,mt 返回 t 的元表,也就是 mt getmetat...
lua元表理解
2015 08 23 22 13 237人閱讀收藏 舉報 lua 在lua中任何變數都有乙個元表 我相信每個字串元表都是string相關,所以可以使用string length 元表中特殊的值有特殊的含義,比如 index,call,add等等。函式setmetatable a,meta 就是將me...