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投票
by

评论由:leonoel 提供

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

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