lua中的弱表 - 有什么实际用途?

时间:2012-06-04 17:49:47

标签: garbage-collection lua weak-references

我理解弱桌是什么 但我想知道几乎可以在哪些弱表中使用?

文档说

  

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

我不明白。这是什么意思?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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.