function weakref(data)
local weak = setmetatable({content=data}, {__mode="v"})
return function() return weak.content end
end
__mode="v"
- 在我的用例中,我正在创建一个图像池,并且只想要一个弱表,其中表中的所有值都是可收集的。 - fluffy类似于这样的代码可以实现你想要的功能:
local obj = {value = "obj.value"}
local ref = setmetatable({real = obj}, {__mode = "v", __call = function(self) return self.real end})
print(obj.value)
print(ref.real.value)
print(ref().value)
obj = nil
collectgarbage()
collectgarbage()
print(obj)
print(ref.real)
print(ref())
< p > __call
部分是可选的,但它为您提供了ref()
调用语法。 如果没有它,您必须使用直接访问版本。 < /p >
newproxy
和元表)。 - Etan Reisner__call
以获取ref()
语法,其中表格本身或元表都是弱引用并保存了引用。 - Etan Reisnerref.real
或ref.obj
或其他类似的东西代替ref()
。 - Etan Reisner