从clojure中的目录加载所有文件

szy*_*ski 2 clojure

如何从目录中加载每个clojure文件?

以下代码不起作用,但说自己("文件夹"在我的src /项目目录中)

(load "folder/*")
Run Code Online (Sandbox Code Playgroud)

jua*_*rro 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 ".")  
Run Code Online (Sandbox Code Playgroud)

文档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 %))
Run Code Online (Sandbox Code Playgroud)

如果要加载目录树中的所有文件,则可以file-seq按照@edbond的建议使用.

(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 %))
Run Code Online (Sandbox Code Playgroud)