它就像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