在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。

09-11 03:30