如何在 Squeak 中弱引用单个对象

How to weakly reference a single object in Squeak

Squeak Smalltalk 支持弱引用集合,但似乎缺少 Java 的 WeakReference class 的直接等效项,它支持对单个对象实例的弱引用。 如果我用多个实例变量定义一个 class 对象,我想将其中一个作为弱引用,那么最惯用的方法是什么?实例化一个 WeakArray 来保存单个引用是否有意义,或者是否有我不知道的更简单的方法?

在撰写本文时,对于 标准 Squeak 图像,没有直接的方法让 class 的一个实例变量变弱而其他实例变量保持不变强的。但是,当前的 VM,例如 CogVM are equipped with Ephemerons, a concept similar, if not more powerful than simple weak references. To my knowledge, the upcoming SPUR Squeak 图像,默认情况下将具有 Ephemerons。

也就是说,您已经可以在 Squeak 中尝试 an older implementation of Ephemerons

使用 Wea​​kArray。

Squeak VM 仅将弱引用实现为索引变量,而实例变量始终是强引用。这就是为什么使用单元素 WeakArray 是正确的做法。

您可以实现自己的单元素 WeakReference class,但它不会比 WeakArray 更有效。