请在 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
by
引用:https://clojure.atlassian.net/browse/ASYNC-221(由leonoel报告)
...