2024 Clojure状态调查中分享你的想法!

欢迎!请参阅关于页面以获取更多有关此功能的信息。

+1
core.async

转换器函数的完成度(1)在通道中调用两次

`
(let [xf (fn [rf]

       (fn
         ([] (println "INIT") (rf))
         ([result] (println "COMPLETING") (rf result))
         ([result input] (println "STEP") (rf result input))))
  c (chan 10 xf)]

(close! c)
(println "RESULT" (<!! c)))
`

将打印

COMPLETING COMPLETING RESULT nil

根据https://clojure.org/reference/transducers,这可能是错误

完成过程必须在最终累积值上精确调用一次完成操作

看起来在core.async中完成fn在这些地方被调用:https://github.com/clojure/core.async/blob/master/src/main/clojure/cljs/core/async/impl/channels.cljs#L122 https://github.com/clojure/core.async/blob/master/src/main/clojure/cljs/core/async/impl/channels.cljs#L146

2 答案

0

评论者:jwr

我可以确认我也遇到过这种情况,对此行为感到惊讶。

0
...