我想知道是否有可能以及如何实现模块系统。
这是它如何工作的例子:我有一些文件夹(例如 modules
),这个文件夹有一堆导出一些变量的 clojure 文件(例如 name
和 regex
), 所有模块都加载到一个列表中,因此可以迭代并从中删除模块。
最佳答案
您可以做的最简单的事情就是使用load-file
一个一个地加载所有这些文件。 https://clojuredocs.org/clojure.core/load-file
否则你可以预编译插件的命名空间并使用一些 java 的本地技术加载它们(我不太了解,但我想有一些不错的库)
更新: 对于一些名为“/my/path”的目录,它可能如下所示:
(run! #(load-file (.getAbsolutePath %))
(rest (file-seq (java.io.File. "/my/path"))))
注意,file
seq 递归遍历目录,并包括所有文件(不仅是*.clj
)。也许你必须过滤它们:
(run! #(load-file (.getAbsolutePath %))
(filter
#(clojure.string/ends-with? (.getName %) ".clj")
(rest (file-seq (java.io.File. "/my/path")))))
关于java - 在clojure中制作一个插件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39127754/