【发布时间】:2019-12-30 18:19:53
【问题描述】:
我发现向 Clojure 转换器添加副作用可能会导致以下意外行为:
(def counter (atom 0))
(def increment-counter-xform
(map (fn [sample]
(swap! counter inc)
sample)))
(eduction increment-counter-xform (range 100))
@counter ;; => 100, as expected
(reset! counter 0)
(eduction increment-counter-xform (range 1000))
@counter ;; => 129, but I expected 1000
为什么上面的代码块对于少量样本会增加计数器的预期次数,但对于大量样本却不会?看来,即使range 的参数非常大,计数器的增量也永远不会超过 129 次。
【问题讨论】:
标签: clojure