1

我明白什么是弱表。
但我想知道弱表实际上可以在哪里使用?

文档说

弱表通常用于您希望注释值而不更改它们的情况。

我不明白。这意味着什么?

4

2 回答 2

2

通常,存储对对象的引用将防止该对象在对象超出范围时被回收。弱引用不会阻止垃圾收集。

于 2012-06-04T18:05:58.953 回答
2

作为评论的答案发布...

由于 Lua 不知道你认为什么是垃圾,它不会收集任何不确定是垃圾的东西。在某些情况下(其中之一可能是调试),您希望为变量指定一个值,而不会导致 Lua 将其视为“非垃圾”。据我了解,弱表允许您执行通常对变量/对象/等所做的操作,但如果它们被弱引用(或在弱表中),它们仍将被 Lua 视为垃圾并在垃圾收集函数被调用。

示例:考虑是否要使用关联数组,在两个单独的私有表中具有键/值对。如果您只想将密钥表用于一种特定用途,一旦您完成使用它,它将在 Lua 中锁定存在。但是,如果您要使用弱表,则可以在使用完它后立即将其作为垃圾收集,从而释放它正在使用的资源。

为了解释一个关于注释的神秘句子,当你“改变”一个变量时,你将它锁定为存在并且 Lua 不再认为它是垃圾。“注释”一个变量意味着给它一个名称、数字或其他一些值。所以,这意味着你可以给一个变量一个名字/值,而不用锁定它(这样 Lua 就可以垃圾收集它)。

翻译:

Weak tables are often used in situations where you wish to give a name to a value without locking the value into existence, which takes up memory.

于 2012-06-04T18:21:30.650 回答