我知道 Lua 中的弱表功能,但是我想对单个变量进行弱引用。
我见过this proposal它建议一个 API 如下:
-- creation
ref = weakref(obj)
-- dereference
obj = ref()
这看起来很理想。但是,这似乎不在其他地方的文档中;只有弱表。
有没有类似于 Python 的 weak reference to object功能?
最佳答案
我相信这样的事情可以做你想做的事:
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())
__call
部分是可选的,但为您提供 ref()
调用语法。没有它,您必须使用直接访问版本。
关于Lua 弱引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29109670/