我有以下功能
(defn save-des-to-db [f]
(->> f
java.io.File.
file-seq
rest
(map (juxt get-bp-name #(.getCanonicalPath %)))
(map get-des)
(map add-bp-des-to-db)
))
工作正常,但我希望看到每个"地图"因为它处理一个大文件夹。
我可以使用map-with-println或map-with-log功能吗? 什么是正确的方法。
答案 0 :(得分:4)
map
的目的是通过将函数应用于每个项目来将序列转换为另一个序列。这是懒惰的,这意味着在您确实需要给定项目之前,它不能保证应用该功能。在您的情况下,您没有对序列执行任何操作,因此无法保证您的元素甚至可以保存。因此,不应将您的函数称为save-des-to-db
,更合适的名称应为build-des-records
。我会省略add-bp-des-to-db
部分,并写(可能在不同的函数中):
(doseq [f folders]
(println "adding folder" f)
(add-bp-des-to-db f))
为了副作用, doseq
重复执行身体。 (请参阅edbond评论中有关doseq,dorun和doall的链接)