我想知道是否可以以及如何实施模块系统。
以下是它如何工作的示例:我有一些文件夹(例如modules
),这个文件夹有一堆clojure文件,可以导出一些变量(例如name
和regex
),所有模块都加载到一个列表中,因此可以迭代并从中删除模块。
答案 0 :(得分:2)
您可以做的最简单的事情是使用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")))))
答案 1 :(得分:0)
在riemann,有一个插件系统设计,可以通过其初始化脚本将jar文件加载到类路径中。这些功能允许遍历类路径,查找随插件一起分发的小型元文件,以提示需求。