2016-08-24 74 views
1

我想知道是否有可能以及如何实现模块系统。在clojure中制作插件系统

这里的例子是如何工作的:我有一些文件夹(如modules),这个文件夹中有为数众多的出口一些变量的Clojure文件(例如nameregex),所有模块被加载到一个列表中,这样有可能迭代和模块可以从中删除。

回答

2

你可以做的最简单的事情就是用load-file一个接一个地加载所有这些文件。 https://clojuredocs.org/clojure.core/load-file

否则你预编译的插件的命名空间,并使用一些Java的原生技术,装载它们(这我不很了解,但我想有一些不错的库为)

更新: 一些目录名为“/我的/路径”它可能看起来如下:

(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"))))) 
+0

如何在使用'load-file'时将模块放入列表中? –

+1

更新了我的答案 – leetwinski