2016-08-24 2 views
1

Я хотел бы узнать, возможно ли и как реализовать модульную систему.Создание плагиновой системы в clojure

Вот пример того, как это работает: у меня есть некоторые папки (например modules), эта папка имеет кучу Clojure файлов, которые экспортируют некоторые переменные (например, name и regex) Все модули загружаются в один список, так что можно итерации, и модули могут быть удалены из него.

ответ

2

Простейшая вещь, которую вы могли бы сделать, - загрузить все эти файлы по одному с помощью load-file. https://clojuredocs.org/clojure.core/load-file

иначе вы могли бы прекомпилировать пространства имен ваших плагин и загружать их, используя некоторые из нативных методов в Java (который я не знаю много о, но я предполагаю, что есть некоторые хорошие библиотеки для этого)

обновления : для некоторого каталога с именем «/ мой/путь» это может выглядеть следующим образом:

(run! #(load-file (.getAbsolutePath %)) 
     (rest (file-seq (java.io.File. "/my/path")))) 

уведомление, что file далее пересекает каталог рекурсивно, и включает в себя все файлы (не только *.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

Смежные вопросы