【发布时间】:2020-07-27 06:49:48
【问题描述】:
我试图理解弱表/弱引用,但仍然无法理解任何东西。
"弱引用是对垃圾收集器不考虑的对象的引用"
我在Programming in Lua First Edition 找到了这个,但它说的下一句话让我很困惑
"这意味着,如果一个对象只保存在弱表中,Lua 最终会收集该对象。"
还有这些信息(虽然不是来自书本)
“如果一个对象有 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 Reference Manual的证明
“换句话说,如果一个对象的唯一引用是弱引用,那么垃圾收集器就会收集这个对象。”
我收集的信息或显示的代码有什么问题吗?我学习东西很差,所以我不得不问很多问题。 如果是,请给我正确的信息和一些具体的例子。
编辑:我现在了解弱表和弱引用是如何工作的,我还学到了关于 table.insert() 的新东西:我可以用 table.insert() 插入表,看起来很棒.
【问题讨论】:
-
在您的代码示例中,t 未显示为弱表,您未将 metatable 设置为 t,也不要将 __mode 字段放入 metatable。
-
哦,好吧,所以我必须把它变成一个弱表。
标签: lua weak-references