它就像Java中的嵌套for循環。你也可以做的嵌套「手動」:
(dotest
(newline)
(println "version 1")
(doseq [x [1 2]
y [:a :b :c]]
(println x y))
(newline)
(println "version 2")
(doseq [x [1 2]]
(doseq [y [:a :b :c]]
(println x y))))
with results:
version 1
1 :a
1 :b
1 :c
2 :a
2 :b
2 :c
version 2
1 :a
1 :b
1 :c
2 :a
2 :b
2 :c
注意doseq
總是返回nil
,且僅產生副作用(如打印到屏幕)好。
甲for
表達的行爲類似,但返回值的(懶惰)序列(請注意,我們生成在每個環路中的矢量[x y]
):
(newline)
(println "For generates a (lazy) sequence:"
(for [x [1 2]
y [:a :b :c]]
[x y]))
與結果:
For generates a (lazy) sequence: ([1 :a] [1 :b] [1 :c] [2 :a] [2 :b] [2 :c])
clojuredocs。 org不是任何形式的clojure文檔的官方來源。這是用戶貢獻的不同質量的示例。該網頁上的唯一官方的就是'doseq'的文檔字符串,它告訴你是讀了'for'的文檔字符串,以瞭解它是如何工作的。我同意,如果'doseq'有它自己的詳盡文檔,但至少它指出你閱讀正確的東西會更好。 – amalloy