key1 = {"one"}
key2 = {"two"}
t = {}
setmetatable(t,{__mode="kv"})
t[key1] = 10
key1 = nil
t[key2] = 100
key2 = nil
collectgarbage() --主动调用gc回收垃圾
for k,v in pairs(t) do
print(k,v)
endt的key值是一些table,后面被赋值为nil了,表明其实这条数据是不需要的了,但是gc是不知道的,这些table的key被存在的table引用着。
所以使用弱引用,设置table的元表的元方法__mode(一个字符串),带有k表示key值为弱引用,带有v表示value是弱引用,反正出现弱引用的值被nil了,整个条目都会被移除。