我对Clojure中的以下代码感到困惑。代码有效。但是,我不明白在匿名函数中,当我们传入参数[new-map [key val]]
时,我们明确告诉Clojure期望{{1>}的矢量形式中的参数}和解构它但我们传入的是哈希 [key val]
。对我来说根本没有意义。
如果我们要将哈希传递给函数,那么参数不应该是{:max 30 :min 10}
吗?有人可以向我解释我的逻辑出错了吗?
[new-map {:key val}]
答案 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函数。