如何在clojure中创建一个空哈希映射

它给我一个ArrayMap作为我的代码

(class (hash-map))

但是当我编写代码时它会出现一个HashMap:

(class (hash-map "" ""))

问题是“如何创建空哈希图”?

最佳答案
您可以像这样创建空哈希映射:

(. clojure.lang.PersistentHashMap create {})
(clojure.lang.PersistentHashMap/create {})
(clojure.lang.PersistentHashMap/EMPTY)

你可以查看hash-map的源代码:

user=> (source hash-map)
(defn hash-map
  "keyval => key val
  Returns a new hash map with supplied mappings.  If any keys are
  equal, they are handled as if by repeated uses of assoc."
  {:added "1.0"
   :static true}
  ([] {})
  ([& keyvals]
   (. clojure.lang.PersistentHashMap (create keyvals))))

正如您在代码中看到的,如果您不提供参数,则hash-map函数返回{},这是PersistentArrayMap的实例.

如果您确实需要空PersistentHashMap的实例,可以使用以下代码创建它:

(. clojure.lang.PersistentHashMap create {})

您可以检查已创建实例的类:

user=> (class (. clojure.lang.PersistentHashMap create {}))
clojure.lang.PersistentHashMap
user=> (class (clojure.lang.PersistentHashMap/create {}))
clojure.lang.PersistentHashMap
user=> (class (clojure.lang.PersistentHashMap/EMPTY)) ;; om-nom-nom's : much simpler
clojure.lang.PersistentHashMap

但是,我不确定这样做是好还是必要.也许您的代码不应该依赖于特定的实现类.

转载注明原文:如何在clojure中创建一个空哈希映射 - 代码日志