以下代码片段失败,因为 <!
位于 {{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}} 宏重新编写,因为所有函数在主体开始时都可以正确初始化。