我明白什么是弱表。
但是我想知道弱表可以实际使用在哪里?
文档说
弱表通常用于您希望注释的情况 值而不更改它们。
我不明白。那是什么意思?
作为评论的答案发布...
由于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.
通常,存储对 obect 的引用将防止在对象超出范围时回收该对象。弱引用不会阻止垃圾回收。