循环向量

时间:2011-12-16 15:52:41

标签: vector map clojure list-comprehension

我是Clojure的新手并且发现当我使用列表理解在clojure中循环这个向量时,我最后会得到一些nil

(def myVec [1,2,3])

user=> (for [x myVec] (println x))
(1
2
3
nil nil nil)

我使用map

得到同样的东西
user=> (map println myVec)
(1
2
3
nil nil nil)

在这些情况下打印nill的原因是什么?

3 个答案:

答案 0 :(得分:9)

formap创建一个新的延迟序列,原始向量中的每个元素都替换为(println element)的结果,println返回nil。

您不应该使用formap对元素执行副作用(如打印)。请使用doseq

答案 1 :(得分:7)

这些nilprintln的返回值。每次打电话

(println "something")

println函数在标准输出上打印something,然后返回nil。代码中的整体效果是您看到所有println调用的所有副作用(I / O),然后REPL打印来自每次调用的返回值(例如,三次nil )。

答案 2 :(得分:1)

nil是println返回的值,因此您看到打印的行后面是nil值的映射列表。