Clojure,控制台:println输出不总是可见
主语。有一个工作程序,它基本上是递归地复制文件系统树。不知何故,递归函数内部的println不会显示任何输出 生成相册调用遍历目录;我可以在控制台中看到“10”,但从来没有任何“11”应该是很多。(println“11”)不可能错过执行路径,因为文件会被真正复制(上面的一行)。这不是很好,因为该项目是作为一个控制台应用程序,向用户报告每个复制的文件,以免他怀疑冻结。这不是开玩笑,因为该应用程序旨在将相册上传到手机上Clojure,控制台:println输出不总是可见,clojure,console,output,println,Clojure,Console,Output,Println,主语。有一个工作程序,它基本上是递归地复制文件系统树。不知何故,递归函数内部的println不会显示任何输出 生成相册调用遍历目录;我可以在控制台中看到“10”,但从来没有任何“11”应该是很多。(println“11”)不可能错过执行路径,因为文件会被真正复制(上面的一行)。这不是很好,因为该项目是作为一个控制台应用程序,向用户报告每个复制的文件,以免他怀疑冻结。这不是开玩笑,因为该应用程序旨在将相册上传到手机上 (defn traverse-dir "Traverses the (sou
(defn traverse-dir
"Traverses the (source) directory, preorder"
[src-dir dst-step]
(let [{:keys [options arguments]} *parsed-args*
dst-root (arguments 1)
[dirs files] (list-dir-groomed (fs/list-dir src-dir))
dir-handler (fn [dir-obj]
"Processes the current directory, source side;
creates properly named directory destination side, if necessary"
(let [dir (.getPath dir-obj)
step (str dst-step *nix-sep* (fs/base-name dir-obj))]
(fs/mkdir (str dst-root step))
(traverse-dir dir step)))
file-handler (fn [file-obj]
"Copies the current file, properly named and tagged"
(let [dst-path (str dst-root dst-step *nix-sep* (.getName file-obj))]
(fs/copy file-obj (fs/file dst-path))
(println "11")
dst-path))]
(concat (map dir-handler dirs) (map file-handler files))))
(defn build-album
"Copy source files to destination according
to command line options"
[]
(let [{:keys [options arguments]} *parsed-args*
output (traverse-dir (arguments 0) "")]
(println "10")
output))
可能是惰性序列的问题:您构建了一个从未实现的惰性seq,因此代码从未执行过。尝试对
遍历目录的结果调用doall
:
(doall (concat (map dir-handler dirs) (map file-handler files))))
您是否在任何地方使用生成相册的结果?还是你打电话就忽略了结果?非常感谢你,尼基塔!就是这样。在我的情况下,我不需要担心性能问题,是吗?@AlexeyOrlov我认为性能很好。您可以通过将映射替换为pmap来进行并行执行的实验。对于大目录来说可能更快。