在地图中记录或减少

时间:2014-06-03 14:31:29

标签: logging clojure

我有以下功能

(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功能吗? 什么是正确的方法。

1 个答案:

答案 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的链接)