Create a map entry in Clojure
创建单个映射条目的内置Clojure方法是什么(如果有的话)?
换句话说,我想要类似
备注:
- 当然,我已经尝试了谷歌搜索,只发现了地图条目?但是,此文档没有链接的资源。
- 我知道
(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
是的,很不幸,这就是答案。我想说的最好的是自己定义一个
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})) |