我试图理解弱表/弱引用,但仍然什么都听不懂。
">弱引用是对垃圾收集器不考虑的对象的引用";
我在Lua第一版的编程中发现了这一点,但接下来它说的话真的让我很困惑
">这意味着,如果一个对象只保存在弱表中,Lua最终会收集该对象";
还有这个信息(不是从书中(
"一个对象被认为是";垃圾";如果它有0个引用"0">
local t = {x = val} -- x is a weak reference because val isn't considered as "garbage" even after getting removed, x is still a reference of val
val = nil
collectgarbage() --you'd expect {} to be collected
for i, v in pairs(t) do
print(v) --prints the table
end
对象只保存在一个弱表(即t(中,但Lua不收集它。我仍然可以打印该表,该表没有被垃圾收集器丢弃。
Lua 5.1参考手册也证明了这一信息
"换句话说,如果对对象的唯一引用是弱引用,那么垃圾收集器将收集该对象">
我收集的信息或显示的代码有什么问题吗?我很不善于学习,所以我不得不问很多问题。如果是,请给我正确的信息和一些具体的例子。
EDIT:我现在明白了弱表和弱引用是如何工作的,我还学到了关于table.insert((的新东西:我可以用table.inser特((插入表,这看起来很神奇。
首先,您必须将表声明为弱(即,具有弱键或弱值,或两者兼有(
local weak = setmetatable({}, {__mode="v"}) -- Create table weak with weak values
然后你可以在表中存储一个对象
table.insert(weak, {"hello", "world"})
由于除了表中的值之外,没有其他对对象的引用,因此GC将在下次运行时收集它。然后,整个键值对将从表中消失,它将是空的,因为没有其他巴黎。