返回介绍

2.10.2 - Weak Table(弱表)

发布于 2019-08-25 13:16:32 字数 593 浏览 1385 评论 0 收藏 0

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 行为就成了未定义的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文