在Clojure中创建地图条目

Create a map entry in Clojure

创建单个映射条目的内置Clojure方法是什么(如果有的话)?

换句话说,我想要类似(map-entry key value)的东西。换句话说,结果应大致等于(first {key value})

备注:

  • 当然,我已经尝试了谷歌搜索,只发现了地图条目?但是,此文档没有链接的资源。
  • 我知道(first {1 2})返回[1 2],这似乎是一个向量。但是:
1
2
3
4
(class (first {1 2}))
; --> clojure.lang.MapEntry
(class [1 2])
; --> clojure.lang.PersistentVector

  • 我在源代码中签入,并且我知道MapEntry和PersistentVector都扩展了APersistentVector(因此MapEntry还是一个向量)。但是,问题仍然是,是否可以从Clojure代码创建MapEntry实例。
  • 最后,但并非最不重要:"不,在Clojure中没有内置的方法可以做到这一点"也是有效的答案(我非常怀疑是这种情况,只是想确保我没有意外遗漏任何东西)。

"no, there is no built in way to do that in Clojure" is also a valid answer

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

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

只需按如下所示指定类名称

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

或导入该类以使用短名称实例化

1
2
3
(import (clojure.lang MapEntry))

(MapEntry."key""val")

正如Rich Hickey在这里所说的:\\\\"我对MapEntry的继续存在不作任何保证。请不要使用它。\\\\"您不应尝试直接实例化诸如clojure.lang的实现类。 .MapEntry。最好只使用:

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