迭代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)) 

,或者您可以使用转换器