如何使用clojure动态包含文件夹中的所有源文件?

用户2219372

我定义了一个函数映射:

(ns fs
  (:require [folder/a :as a]
            [folder/b :as b]
            [folder/c :as c]) 

(def functions {:a  a/f :b b/f :c c/f})

(doseq [[_ f] functions] (f))

现在我想在文件夹中添加更多的命名空间,我不想修改上面的代码。如何使用文件夹中的每个命名空间functions动态填充f

埃尔文·罗斯福

首先是一些帮手:

(defn directory
  "Get directory from path"
  [path]
  (clojure.java.io/file path))

(defn file-names
  "Get file names of the files in the directory."
  [files]
  (map (fn [file] (.getName file)) files))

(defn namespace
  "Remove the extension from the file name and prefix with folder-name"
  [folder-name file-name]
  (->> (clojure.string/split file-name #"\.")
       (butlast)
       (apply str)
       (str folder-name ".")
       (symbol)))

然后从您的文件夹中检索所有命名空间,您需要路径和文件夹名称:

(def namespaces
  (let [names (->> "/path/to/your/folder-name"
                   directory
                   file-seq ;; Gets the tree structure of the directory
                   rest ;; Get rid of the the directory name
                   file-names)]
    (map (partial namespace "folder-name") names)))

接下来通过以下方式获取每个命名空间中的公共函数ns-publics

(def functions
  (->> namespaces
       (map (juxt keyword (comp vals ns-publics)))
       (into {})))

;; => prints {:namespace-key '(fn-a fn-b) :namespace-key2 '(fn-b fn-c)}

请注意,这会在命名空间键之后获取命名空间中所有公共函数的列表。

我们可以执行如下函数:

(doseq [[_ ns-fns] functions
        f ns-fns] (f))

当然,这只适用于元数为零的函数。否则,您必须将参数传递给f.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从Java读取文件夹中的所有文件?

我如何使Apache包含文件夹中的所有文件

如何删除文件夹中的所有文件,而不使用NIX标准库删除文件夹?

Python:如何为子目录中的所有源文件运行unittest.main()?

如何列出tomcat文件夹中的所有文件?

如何从SpringBoot应用程序的资源文件夹中读取所有文件?

“ rootDir”应包含所有源文件

如何使用js中的所有源文件下载html文件?

如何导入文件夹中的所有文件?

如何连接文件夹中的所有JS文件?

如何使用.gitignore忽略文件夹中的所有子文件夹

如何在不包含文件夹本身的情况下查找文件夹中的所有文件

如何使用python删除文件夹中的所有文件夹?

如何通过递归复制文件夹而不在dest文件夹中包含源文件夹标签?

如何使用pathlib在文件夹中创建包含所有文件路径的列表

打印包含相同子文件夹的所有文件夹中哪些子文件夹为空?

错误TS6059:文件不在“ rootDir”下。.“ rootDir”应包含所有源文件

如何将语法突出显示的文件夹中的所有源代码文件自动(递归)转换为单个PDF?

查看包含文件夹中子文件夹中的所有邮件?

下载网页的所有源文件

如何使用Make列出特定目录中的所有源文件

如何使用PowerShell从文件夹和所有子文件夹中删除所有访问规则?

如何使用Bash搜索路径中包含给定子字符串的所有文件/文件夹?

如何从文件夹中删除所有文件?

如何包含文件夹中的所有源文件?(C ++,MS VS 2013)

如何使用Groovy读取文件夹中的所有文件并替换文件中的模式

如何计算文件夹中所有标头和源文件中的所有代码行?* .cpp * .h

如何使用bash将子文件夹中的所有文件移动到新文件夹中?

如何为主目录中的所有用户创建包含文件夹的文件