如何从目录中加载每个clojure文件?
以下代码不起作用,但自己说(“文件夹”在我的src / project目录中)
(load "folder/*")
答案 0 :(得分:5)
以下函数执行您要查找的内容,根据您描述的方案,似乎没有必要检查依赖项,因此该函数不会执行任何操作,只需将load-file
与所提供路径中的所有文件一起使用
(defn load-files [path]
(let [file (java.io.File. path)
files (.listFiles file)]
(doseq [x files]
(when (.isFile x)
(load-file (.getCanonicalPath x))))))
(load-files ".")
listFiles
的文档说不能保证文件的返回顺序,因此可能的改进是提供一个键功能(一个返回完成排序的键的函数)进行排序。
(defn load-files [path f]
(let [file (java.io.File. path)
files (sort-by f (.listFiles file))]
(doseq [x files]
(when (.isFile x)
(load-file (.getCanonicalPath x))))))
(load-files "." #(.getName %))
如果您要加载目录树中的所有文件,则可以按照@edbond的建议使用file-seq
。
(defn load-files [path f]
(let [files (->> path java.io.File. file-seq (sort-by f))]
(doseq [x files]
(when (.isFile x)
(load-file (.getCanonicalPath x))))))
(load-files "." #(.getName %))