映射执行副作用的矢量

sda*_*das 13 clojure

我试图在Clojure中迭代一行"行".基本上,它看起来像:

[{:start {:x 1 :y 3 :z 4}, :end {:x 3 :y 7 :z 0}}, ...]
Run Code Online (Sandbox Code Playgroud)

我想应用一个函数,将每个"行"打印到一个新行,ala:

(map #(println %) vector-of-lines)
Run Code Online (Sandbox Code Playgroud)

但这似乎没有调用该函数.我不应该在这个例子中使用"map"功能吗?

Jul*_*ang 16

(dorun (map println vector-of-lines))
Run Code Online (Sandbox Code Playgroud)

dorun强制评估惰性序列,但也丢弃序列中每个项目的单个结果.这非常适合纯粹用于副作用的序列,这正是您想要的.


Jus*_*mer 15

map是懒惰的,除非你要求,否则不会实现结果.如果要对序列中的每个元素执行副作用,并且不关心返回值,请使用doseq:

;; returns nil, prints each line
(doseq [line vector-of-lines]
  (println line))
Run Code Online (Sandbox Code Playgroud)

如果您确实关心返回值,请使用(doall):

;; returns a sequence of nils, prints each line
(doall (map println vector-of-lines))
Run Code Online (Sandbox Code Playgroud)