Предположим, что мы работаем на объектно-ориентированном языке, и есть два класса X и Y, и между этими классами существует двунаправленная связь.Сопоставление объектно-ориентированной модели с Clojure
Таким образом, экземпляр X может указывать на экземпляр Y и наоборот.
В классах Clojure обычно переводит на карты, чтобы мы могли иметь:
{:type :x :name "instance of X"}
{:type :y :name "instance of Y"}
Как мы представляем двунаправленную связь между этими «объектами», не используя что-то вроде «внешних ключей»? Или это обычно то, что напрямую делегируется базе данных?
не рефов быть больше подходит для этого, так как их изменение может быть скоординированы? –
btw, этот код приводит к «StackOverflowError clojure.lang.RT.toArray (RT.java:1544)», когда я попробовал его –
Зависит от приложения. Если вы просто хотите установить значение один раз при создании карты, возможно, достаточно атома. Если вы собираетесь делать много обновлений и хотите обеспечить согласованность графика, то да, вы, вероятно, должны использовать refs. Переполнение стека, вероятно, связано с печатью результата, так как печать атома покажет его значение - не уверен, повлияет ли это '* print-level *' на это или нет. – Alex