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