Слабые ссылки MATLAB для обработки объектов класса

Размышляя о возможности ORM на основе класса дескрипторов в MATLAB, возникла проблема кэширования экземпляров. Я не мог сразу придумать способ сделать слабые ссылки или слабую карту, хотя я я догадываюсь, что можно что-то придумать с помощью слушателей событий. Есть идеи?

Дополнительная информация

В MATLAB класс дескриптора (в отличие от класса значений) имеет ссылочную семантику. Примером, включенным в MATLAB, является класс container.Map . Если вы создадите один экземпляр и передадите его функции, любые изменения, которые функция вносит в объект, будут видны через исходную ссылку. То есть он работает как ссылка на объект Java или Python.

Подобно Java и Python, MATLAB отслеживает тем или иным образом, сколько вещей ссылается на каждый объект класса дескриптора. Когда их больше нет, MATLAB знает, что удалить объект безопасно.

Слабая ссылка - это ссылка, которая ссылается на объект, но не считается ссылкой для целей сборки мусора. Итак, если единственные оставшиеся ссылки на объект слабые, тогда его можно выбросить. Обычно событие или обратный вызов может быть передан слабой ссылке - когда объект отбрасывается, слабые ссылки на него будут уведомлены, что позволит запустить код очистки.

Например, карта слабых значений похожа на карту нормалей , за исключением того, что значения (в отличие от ключей) реализованы как слабые ссылки. Класс слабой карты может организовать обратный вызов или событие для каждой из этих слабых ссылок, так что при удалении объекта, на который указывает ссылка, удаляется запись ключа / значения в карте, сохраняя карту красивой и аккуратной.

8
задан Mikhail 17 December 2010 в 10:08
поделиться