2024 年 Clojure 状态调查中分享您的观点!

欢迎!请参阅关于页面以了解此工作方式的更多信息。

+1
core.async

以下代码片段失败,因为 <! 位于 <{{go}}> 边界之外。

`
(let [port (a/chan)]
(a/go

(letfn [(my-even? [n] (if (zero? n) true (my-odd? (dec n))))
        (my-odd? [n] (if (zero? n) false (my-even? (dec n))))]
  (my-even? (a/<! port)))))

`

在 {{letfn}} 体内的异步代码应由 {{go}} 宏重写,因为所有绑定函数可以在主体开始时正确初始化。

5 答案

0

评论者:bronsa

移除错误补丁

0

评论者:alexmiller

这个问题的状态如何? 0001-ASYNC-221-handle-letfn-in-ioc+test.patch 是这个补丁吗?

0

评论者:leonoel

不,修复和测试都是错误的。
修复不正确地建立了循环引用,并且测试由于它遮蔽 clojure.core 的 odd?/even? 而未能检查它。

0

评论者:leonoel

更新示例以正确检查循环引用

0
参考:[https://clojure.atlassian.net/browse/ASYNC-221](https://clojure.atlassian.net/browse/ASYNC-221)(由leonoel报告)
...