Rich 在 CLJ-799 中的说法:“print-dup 的目的是类型保留”
user=> (hash-map :k :v)
{:k :v}
user=> (type *1)
clojure.lang.PersistentHashMap
user=> (binding [*print-dup* true] (print-str *2))
"{:k :v}"
user=> (read-string *1)
{:k :v}
user=> (type *1)
clojure.lang.PersistentArrayMap
原因是由于 {{RT.map}} 条件性地在大小在 {{PersistentArrayMap.HASHTABLE_THRESHOLD}} 范围内时创建数组映射。