История изменений
Исправление Nervous, (текущая версия) :
как сделать b и c на скобочках?
Воспользоваться тем фактом, что по значению сравниваются (неизменяемые) значения, а (изменяемые) ссылочные типы сравниваются по идентичности.
(let [a '(1 (2 "ok")) ;; (immutable) value
a* (atom '(1 (2 "ok"))) ;; (mutable) reference type
b {a 4}
c {a* 4}]
(println (get b a))
(println (get c a))
(println (get b a*))
(println (get c a*))
;; two instances of a reference type are not equal,
;; even if they hold the same value (currently)
(println (get c (atom '(1 (2 "ok"))))))
;; => 4
;; => nil
;; => nil
;; => 4
;; => nil
Исправление Nervous, :
как сделать b и c на скобочках?
Воспользоваться тем фактом, что по значению сравниваются (неизменяемые) значения, а (изменяемые) ссылочные типы сравниваются по идентичности.
(let [a '(1 (2 "ok")) ;; (immutable) value
a* (atom '(1 (2 "ok"))) ;; (mutable) reference type
b {a 4}
c {a* 4}]
(println (get b a))
(println (get c a))
(println (get b a*))
(println (get c a*))
;; two reference types are not equal, even if they hold
;; the same value (currently)
(println (get c (atom '(1 (2 "ok"))))))
;; => 4
;; => nil
;; => nil
;; => 4
;; => nil
Исходная версия Nervous, :
как сделать b и c на скобочках?
Воспользоваться тем фактом, что по значению сравниваются (неизменяемые) значения, а (изменяемые) ссылочные типы сравниваются по идентичности.
(let [a '(1 (2 "ok")) ;; (immutable) value
a* (atom '(1 (2 "ok"))) ;; (mutable) reference type
b {a 4}
c {a* 4}]
(println (get b a))
(println (get c a))
(println (get b a*))
(println (get c a*)))
;; => 4
;; => nil
;; => nil
;; => 4