Почему привязка влияет на тип моей карты?

Я играл в REPL, и у меня было какое-то странное поведение:

Clojure 1.4.0
user=> (type {:a 1})
clojure.lang.PersistentArrayMap
user=> (def x {:a 1})
#'user/x
user=> (type x)
clojure.lang.PersistentHashMap

Я думал, что все маленькие литеральные карты являются экземплярами PersistentArrayMap, но, видимо, это не так, если они связаны с def. Почему использование defзаставляет Clojure выбирать другое представление для моей маленькой карты? Я знаю, что это, вероятно, просто какая-то странная деталь реализации, но мне любопытно.

16
задан Matt Fenwick 17 August 2012 в 11:39
поделиться