对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