创建单个地图条目的内置 Clojure方式(如果有)是什么?
换句话说,我想要像(map-entry key value)
这样的东西。换句话说,结果应该或多或少等同于(first {key value})
。
说明:
(first {1 2})
会返回[1 2]
,这似乎是一个向量。但是:(class (first {1 2}))
; --> clojure.lang.MapEntry
(class [1 2])
; --> clojure.lang.PersistentVector
MapEntry
或多或少也是矢量)。但问题是,我是否可以从Clojure代码创建MapEntry
实例。答案 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}))