2015-01-27 6 views
3

Squeak Smalltalk поддерживает коллекции слабых ссылок, но, похоже, не имеет прямого эквивалента класса Java WeakReference, который поддерживает слабую ссылку на экземпляр одного объекта. Если я определяю класс объекта с несколькими переменными экземпляра, один из которых я хочу быть слабой ссылкой, каков самый идиоматический способ сделать это? Имеет ли смысл создать экземпляр WeakArray для хранения этой единственной ссылки или есть более простой способ, о котором я не знаю?Как слабо ссылаться на один объект в Squeak

ответ

4

Использование WeakArray.

Squeak VM реализует слабые ссылки только как индексированные переменные, в то время как переменные экземпляра всегда сильно привязаны. Вот почему использование одноэлементного WeakArray - это правильная вещь.

Вы можете реализовать свой собственный класс с одним элементом WeakReference, но он не будет более эффективным, чем WeakArray.

2

На момент написания статьи с кодом Squeak image нет прямого способа, чтобы одна переменная экземпляра класса была слабой, а другие держались сильными. Тем не менее, текущие виртуальные машины, такие как CogVM, оснащены Ephemerons, концепцией, аналогичной, если не более мощной, чем простые слабые ссылки. Насколько я знаю, на предстоящем изображении SPUR Squeak по умолчанию будет иметь Ephemerons.

Это, как говорится, вы можете попробовать an older implementation of Ephemerons в Squeak уже.

 Смежные вопросы

  • Нет связанных вопросов^_^