fix traverse with early termination to unwrap reduced vals
This commit is contained in:
parent
76682e64d4
commit
e2b6f63f99
2 changed files with 18 additions and 2 deletions
|
|
@ -314,8 +314,16 @@
|
|||
))))
|
||||
|
||||
(defn do-compiled-traverse [apath structure]
|
||||
(unreduced (do-compiled-traverse* apath structure)))
|
||||
|
||||
(let [traverser (do-compiled-traverse* apath structure)]
|
||||
(reify #?(:clj clojure.lang.IReduce :cljs cljs.core/IReduce)
|
||||
(#?(:clj reduce :cljs -reduce)
|
||||
[this afn]
|
||||
(#?(:clj .reduce :cljs -reduce) this afn (afn)))
|
||||
(#?(:clj reduce :cljs -reduce)
|
||||
[this afn start]
|
||||
(let [res (#?(:clj .reduce :cljs -reduce) traverser afn start)]
|
||||
(unreduced res)
|
||||
)))))
|
||||
|
||||
(defn compiled-traverse-all* [path]
|
||||
(fn [xf]
|
||||
|
|
|
|||
|
|
@ -1375,3 +1375,11 @@
|
|||
(is (= [1 2]
|
||||
(into [] (traverse-all :a) [{:a 1} {:a 2}])))
|
||||
)
|
||||
|
||||
(deftest early-terminate-traverse-test
|
||||
(is (= 6
|
||||
(reduce
|
||||
(completing (fn [r i] (if (> r 5) (reduced r) (+ r i))))
|
||||
0
|
||||
(traverse [s/ALL s/ALL]
|
||||
[[1 2] [3 4] [5]])))))
|
||||
|
|
|
|||
Loading…
Reference in a new issue