對lua坑的整合: 參考: https://www.cnblogs.com/guangyun/p/4685550.html Lua 弱引用table ---------- 1.lua弱引用 t = {}; -- 使用一個table作爲t的key值 key1 = {name = "key1"}; t[key1] = 1; key1 = nil; -- 強制進行一次垃圾收集 collectgarbage(); for key, value in pairs(t) do print(key.name .. ":" .. value); end
輸出:
[LUA-print] key1:1
設置弱引用後:
t = {}; -- 給t設置一個元表,增加__mode元方法,賦值爲“k” setmetatable(t, {__mode = "k"}); -- 使用一個table作爲t的key值 key1 = {name = "key1"}; t[key1] = 1; key1 = nil; -- 又使用一個table作爲t的key值 key2 = {name = "key2"}; t[key2] = 1; key2 = nil; -- 強制進行一次垃圾收集 collectgarbage(); for key, value in pairs(t) do print(key.name .. ":" .. value); end
輸出:
無
1)key值弱引用,也就是剛剛說到的情況,只要其他地方沒有對key值引用,那麼,table自身的這個字段也會被刪除。設置方法:setmetatable(t, {__mode = “k”});
2)value值弱引用,情況類似,只要其他地方沒有對value值引用,那麼,table的這個value所在的字段也會被刪除。設置方法:setmetatable(t, {__mode = “v”});
3)key和value弱引用,規則一樣,但是key和value都同時生效,任意一個起作用時都會導致table的字段被刪除。設置方法:setmetatable(t, {__mode = “kv”});
沒有設置弱引用時
To Be Continue