我正在尝试将core.async通道的结果转储到stdout。
这是我所拥有的(简化示例):
(use 'clojure.core.async)
(def mychan (to-chan (range 100)))
(loop []
(let [a (<!! mychan)]
(if (not (nil? a))
(do
(println a)
(recur)))))
现在我想我应该可以用map替换它:
(map (fn [a] (println a) a) [mychan])
但这似乎是懒惰的,并没有返回任何结果。
我不禁觉得我的循环功能在某种程度上是一种解决方法。我的问题是 - 迭代core.async频道进行打印的最佳方法是什么?
答案 0 :(得分:4)
更好地使用go-loop在go块中运行日志记录过程:
(def c (async/chan 10))
(go-loop []
(when-let [msg (<! c)]
(println msg)
(recur)))
(async/onto-chan c (range 100))
或者您可以在1.7
上使用传感器(def prn-chan (async/chan 10 (map println)))
(async/onto-chan prn-chan (range 100))