在Clojure中,doseq和for有什么区别?什么时候您会选择使用一个而不是另一个呢?
最佳答案
区别在于for
构建一个惰性序列并返回它,而doseq
用于执行副作用并返回nil。
user=> (for [x [1 2 3]] (+ x 5))
(6 7 8)
user=> (doseq [x [1 2 3]] (+ x 5))
nil
user=> (doseq [x [1 2 3]] (println x))
1
2
3
nil
如果要基于其他序列构建新序列,请使用for。如果要根据某些序列的元素产生副作用(打印,写入数据库,发射核弹头等),请使用doseq。