LINUX.ORG.RU

История изменений

Исправление 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