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 "结果" (<!! c)))
`

将打印

COMPLETING COMPLETING 结果 nil

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

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

看起来在 core.async 中完成函数在以下地方被调用:[链接](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
回答
参考资料:https://clojure.atlassian.net/browse/ASYNC-183(由wagjo报告)
...