지도와 레코드 간의 평등과 관련하여 Clojure의 동작이 혼란 스럽습니다. 이 첫 번째 예에서는 구조적으로 동일한 두 가지 유형이 있습니다.Clojure의 매핑과 평등
user> (defrecord Titi [a b])
user.Titi
user> (def titi (Titi. 1 2))
#'user/titi
user> titi
#user.Titi{:a 1, :b 2}
user> (= titi {:a 1 :b 2})
false
이 왜 차이가 있습니다 : 우리는 해시 맵과 구조적으로 동일 기록하지만, = 함수가 false를 돌려주는이 두 번째 예에서는
user> (defn make-one-map
[]
{:a "a" :b "b"})
#'user/make-one-map
user> (def m1 (make-one-map))
#'user/m1
user> m1
{:a "a", :b "b"}
user> (def m2 {:a "a" :b "b"})
#'user/m2
user> m2
{:a "a", :b "b"}
user> (= m1 m2)
true
user> (type m1)
clojure.lang.PersistentArrayMap
user> (type m2)
clojure.lang.PersistentHashMap
: 평등 = 함수는 true를 반환? 나는 Clojure 1.3을 사용하고 있으며, 정말 혼란 스럽다. defrecord
대한 참조 문에서
유형 함수가 동일한 유형이 아니므로 PersistentArrayMap 및 PersistentHashMap의 인스턴스가 =와 같은 이유는 무엇입니까? – z1naOK9nu8iY5A
"type-and-value-based ="약속은'defrecord'의 문서화 문자열에 명시되어 있으며 레코드에 적용됩니다. 반면에 일반 맵은 가치 기반의 계획에 참여해야하며, (= (hash-map : foo 1 : bar 2) (sorted-map : foo 1 : bar 2))'와'(= (java.util.HashMap. {: foo 1 : bar 2}) {: foo 1 : bar 2})'는 모두 '참'입니다. –