Когда бы вы использовали карту поверх WeakMap, когда у вас есть объекты в качестве ключей?
Несколько раз, когда я использовал объекты в качестве ключей на карте, я делал это для хранения метаданных об этом конкретном объекте. Я всегда использовал WeakMap
Это связано с тем, что запись на карте автоматически собирает мусор, когда объект, который он использовал в качестве ключа, собирает мусор.
Хранение метаданных - единственный вариант использования, который я могу представить для объектов в качестве ключей на картах, но мне любопытно, есть ли другие варианты использования для объектов в качестве ключей, и если в этих случаях вы будете использовать обычный Map
через WeakMap
,
1 ответ
Рассмотрим реализацию для моделирования графиков. Предположим, что узлы графа могут быть объектами, определенными пользователем. Реализация графа должна хранить эти узлы, но также связывать их с другими данными (такими как ребра (подумайте о "словаре смежности")). Нам нужна карта, так как мы должны иметь возможность итерации по всем узлам (например, что делает networkx.github.io (в Python) и мой порт JS)
И даже если бы нам не нужно было перебирать узлы, мы, вероятно, не хотели бы, чтобы они собирались мусором, если на них нет других ссылок, так как это молча разрушило бы граф.
- Феликс Клинг