一個(gè)table的弱引用類型是通過(guò)其元素表中的__mode字段來(lái)決定的,這個(gè)字段的值應(yīng)為一個(gè)字符串,如果這個(gè)字符串中包含字母'k'/'v'那么這個(gè)table 的value是弱引用,代碼如下:
key = {}
a[key] = 1
key = {}
a[key] = 2
collectgarbage() --強(qiáng)制進(jìn)行一次垃圾收集
for k, v in pairs(a) do
print(v)
end
結(jié)果:2
第二句復(fù)制key = {} 會(huì)覆蓋第一個(gè)key.當(dāng)收集器運(yùn)行時(shí),由于沒有其他地方在引用第一個(gè)key,因此第一個(gè)key就被回收了,并且table中的相應(yīng)條目也被刪除了,至于第二個(gè)key,變量key仍引用它,因此它沒有被回收了
注意,lua只會(huì)回收弱引用table中的對(duì)象,而像數(shù)字和bool這樣的值,是不可以回收的。