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中这些地方被调用: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报告)
...