为什么减少帮助器在减少地图时会对矢量进行解构?

时间:2014-10-17 22:04:41

标签: clojure

我对Clojure中的以下代码感到困惑。代码有效。但是,我不明白在匿名函数中,当我们传入参数[new-map [key val]]时,我们明确告诉Clojure期望{{1>}的矢量形式中的参数}和解构它但我们传入的是哈希 [key val]。对我来说根本没有意义。

如果我们要将哈希传递给函数,那么参数不应该是{:max 30 :min 10}吗?有人可以向我解释我的逻辑出错了吗?

[new-map {:key val}]

2 个答案:

答案 0 :(得分:5)

user=> (type [:plum 8])
clojure.lang.PersistentVector
user=> (def mymap {:apple 1 :banana 2 :orange 10 :plum 8})
#'user/mymap
user=> (type mymap)
clojure.lang.PersistentHashMap
user=> (first mymap)
[:plum 8]
user=> (type (first mymap))
clojure.lang.MapEntry

In the docs,大约在页面的一半处:

  

映射条目被视为键和值的有序集合。

MapEntry扩展了AMapEntry,扩展了APersistentVector,也扩展了PersistentVector(您熟悉的那个)。

简短版本是,您可以迭代地图的条目,地图中的每个条目都像一个矢量,具有完全相同的结构:[key value]

答案 1 :(得分:2)

当作为序列遍历时,

{:key1 :val1, :key2 :val2}变为'([:key1 :val1] [:key2 :val2])(尽管不一定按此顺序)。在这里,reduce以这种方式遍历它,并将每一对分别传递给reducer函数。