Weak Table(弱表)
weak table 是一个这样的 table,它其中的元素都被弱引用。弱引用将被垃圾收集器忽略掉,换句话说,如果对一个对象的引用只有弱引用,垃圾收集器将回收这个对象。
weak table 的键和值都可以是 weak 的。如果一个 table 只有键是 weak 的,那么将运行收集器回收它们的键,但是会阻止回收器回收对应的值。而一个 table 的键和值都是 weak 时,就即允许收集器回收键又允许收回值。任何情况下,如果键和值中任一个被回收了,整个键值对就会从 table 中拿掉。 table 的 weak 特性可以通过在它的 Metatable 中设置 __mode 域来改变。如果 __mode 域中是一个包含有字符 'k' 的字符串时, table 的键就是 weak 的。如果 __mode 域中是一个包含有字符 'v' 的字符串时, table 的值就是 weak 的。
在你把一个 table 当作一个 metatable 使用之后,就不能再修改 __mode 域的值。否则,受这个 metatable 控制的 table 的 weak 行为就成了未定义的。


