运算符重载

;; = is the one case that needs no overloading at all: it compares
;; values structurally, so two records with equal fields are equal
(defrecord Point [x y])

(def p1 (->Point 1 1))
(def p2 (->Point 2 2))
(def p3 (->Point 1 1))

(println "equal1 is" (= p1 p2))
;; equal1 is false
(println "equal2 is" (= p1 p3))
;; equal2 is true
(println "equal3 is" (not= p1 p3))
;; equal3 is false

;; "the same object" is a different question, and it has its own name
(println "identical is" (identical? p1 p3))