3
我有两个系列x
和y
,都有不同数量的项目。我想通过x
循环,并做一些副作用,而通过y
骑自行车。我不想在通过x
循环时重复y
。既doseq
和for
重复y
:Clojure:在循环另一个集合的同时循环一个集合?
(for [x (range 5)
y ["A" "B"]]
[x y])
这产生([0 "A"] [0 "B"] [1 "A"] [1 "B"] [2 "A"] [2 "B"] [3 "A"] [3 "B"] [4 "A"] [4 "B"])
。
我想要的是会产生的东西:([0 "A"] [1 "B"] [2 "A"] [3 "B"] [4 "A"])
。
背景,我有一个文件行和core.async
渠道(比如5),我希望把每行到下一个通道在我的收藏,是这样的:
(defn load-data
[file chans]
(with-open [rdr (io/reader file)]
(go
(doseq [l (line-seq rdr)
ch chans]
(>! ch l)))))
因此,我将不得不采取的这个结果,然后doseq在它把它放入渠道? – arnab 2015-03-13 17:09:41
是的。我个人认为,我喜欢将数据生成保存在自己的函数中,这样我就可以独立于移动它的机制来进行测试。 – 2015-03-13 17:11:37
是的,最终我想保持我所有的功能都是纯粹的,并且有一层可以管理频道推送和拉取的功能,所以这是有效的。 – arnab 2015-03-13 17:13:22