为什么解体会在Clojure中行走但不适合走路?

时间:2015-03-14 04:05:39

标签: clojure nested nested-lists clojure.walk

我可以在Clojure中使用walk走到下面地图的顶层:

(use 'clojure.walk)
(walk (fn [[k v]] (println (type k) k v)) identity {:a 1 :b {:c 3}})

结果:

clojure.lang.Keyword :b {:c 3}
clojure.lang.Keyword :a 1
{}

(这与map)非常相似

但是当我使用postwalk时 - 它会破坏尝试进行解构:

(postwalk (fn [[k v]] (println (type k) k v)) {:a 1 :b {:c 3}})

结果:

UnsupportedOperationException nth not supported on this type: Keyword  clojure.lang.RT.nthFrom (RT.java:857)

1 个答案:

答案 0 :(得分:1)

也许看看你在行走时发生的事情可以为你的问题提供一些启示。

user=> (postwalk println {:a 1 :b {:c 3}})
:a
1
[nil nil]
:b
:c
3
[nil nil]
{}
[nil nil]
{}
nil
user=>