迭代Core.async通道进行打印的最佳方式?
问题描述:
我试图将core.async通道的结果转储到标准输出。迭代Core.async通道进行打印的最佳方式?
这里是我有什么(简化的例子):
(use 'clojure.core.async)
(def mychan (to-chan (range 100)))
(loop []
(let [a (<!! mychan)]
(if (not (nil? a))
(do
(println a)
(recur)))))
现在,我想我应该能够用地图来取代这个:
(map (fn [a] (println a) a) [mychan])
但是,这似乎是懒惰和没有按” t返回任何结果。
我不禁觉得我的循环函数有点解决方法。我的问题是 - 迭代core.async通道进行打印的最佳方式是什么?
答
更好地利用去循环到去块运行记录过程:在1.7
(def prn-chan (async/chan 10 (map println)))
(async/onto-chan prn-chan (range 100))
(def c (async/chan 10))
(go-loop []
(when-let [msg (<! c)]
(println msg)
(recur)))
(async/onto-chan c (range 100))
,或者您可以使用转换器