sequence
的文档字符串说明
- "... 不会强制懒序列..."
- "... 返回一个懒序列..."
基于此,我本以为 sequence
(单独使用)不会导致其任何输入被消耗。不清楚这是否为预期行为,但原文可能可以调整以表明 sequence
会部分实现其输入。
(do
(->> (range 1000)
(map #(doto % prn))
(sequence (map inc)))
nil)
打印以下内容到标准输出
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
这与像 map
、filter
这样的懒序列函数以及如 eduction
这样延迟选型的选项不同。以下表达式不会打印任何内容到标准输出
(do
(->> (range 1000)
(map #(doto % prn))
(eduction (map inc)))
nil)
(do
(->> (range 1000)
(map #(doto % prn))
(map inc))
nil)
另一个参考也暗示 sequence
(单独使用)不会消耗任何输入,https://clojure.org/reference/transducers#_sequence
结果序列元素是逐步计算的。这些
序列将以**按需**的方式逐步消耗输入,并完全实现中间操作。这种行为与懒序列的等效操作不同。
操作。
(重点是我自己划的)
并不令人惊讶的是,sequence
可以分块,但对我不惊讶的是,sequence
会在没有对返回结果进行额外调用的情况下部分实现其输入。