在Clojure中创建一个地图条目

时间:2017-07-17 19:16:03

标签: clojure

创建单个地图条目的内置 Clojure方式(如果有)是什么?

换句话说,我想要像(map-entry key value)这样的东西。换句话说,结果应该或多或少等同于(first {key value})

说明:

  • 当然,我已经尝试使用Google搜索,但只找到map-entry?但是,此文档没有链接资源。
  • 我知道(first {1 2})会返回[1 2],这似乎是一个向量。但是:
(class (first {1 2}))
; --> clojure.lang.MapEntry
(class [1 2])
; --> clojure.lang.PersistentVector
  • 我检查了源代码,并且我知道MapEntryPersistentVector都延伸APersistentVector(所以MapEntry或多或少也是矢量)。但问题是,我是否可以从Clojure代码创建MapEntry实例。
  • 最后,但并非最不重要:"不,在Clojure中没有内置方法可以做到这一点"也是一个有效的答案(我强烈怀疑是这种情况,只是想确保我不小心错过了什么)。

3 个答案:

答案 0 :(得分:9)

  

"不,在Clojure中没有内置方法可以做到这一点"也是一个有效的答案

是的,不幸的是,这就是答案。我说你能做的最好就是自己定义一个map-entry函数:

(defn map-entry [k v]
  (clojure.lang.MapEntry/create k v))

答案 1 :(得分:5)

只需指定一个类名,如下所示

(clojure.lang.MapEntry. "key" "val")

或导入类以通过短名称实例化

(import (clojure.lang MapEntry))

(MapEntry. "key" "val")

答案 2 :(得分:2)

As Rich Hickey says here: "I make no promises about the continued existence of MapEntry. Please don't use it."您不应该尝试直接实例化clojure.lang.MapEntry等实现类。最好只使用:

(defn map-entry [k v] (first {k v}))