2016-12-22 3 views
1

Как включить все файлы в папку с помощью clojure.Как включить все файлы в папку с помощью clojure

Вот мой код:

(defn LoadFiles[] 
    (include "utils") 
) 
(LoadFiles) 

Но приведенный выше код не работает.

+0

, что вы имеете в виду «включить»? вы хотите «потребовать» их? или загрузить контент? – cfrick

+0

Я хочу загрузить все содержимое из файлов .. –

+0

, тогда я бы пошел на что-то вроде этого '(filter # (. IsFile%) (file-seq (io/file" utils ")))' – cfrick

ответ

2

Насколько я знаю, в clojure нет include (исправьте меня, если я ошибаюсь). Вы должны использовать use или require.

Это один, вероятно, следует работать (для всех .clj файлов в utils верхнем уровне, но вы можете легко расширить его рекурсивным):

(defn list-sources [path] 
    (map #(str path "." (second (re-matches #"^(\w+)\.clj$" (.getName %)))) 
     (filter #(.isFile %) (file-seq path)))) 

(run! #(require (vector (symbol %) :refer :all)) 
     (list-sources (java.io.File. "utils"))) 
+0

Я пробовал с приведенным выше кодом и получил ошибку ниже: Исключение из потока "main" java.lang.RuntimeException: Не удалось решить символ: запустите! в этом контексте, компиляция: (/ home/user/Projects/Clojure/clojure-1.5.1/file.clj: 5: 1) –

+0

oh, 'run!' был добавлен в clojure 1.7 .. для вашей версии вы можете использовать '(dorun (map # (require ...' – leetwinski

+0

Могу ли я использовать следующее: '(load-file" utils/file-one.clj ")'? Мне нужно настроить конфигурационный файл, для которого мне нужно включить все clj-файлы из папки. Я новичок в этой технологии. –

1

Может быть что-то вроде:

(defn load-files [dir] 
    (doseq [f (file-seq (File. dir)) 
      :when (.isFile f)] 
    (load-file (.getAbsolutePath f)))) 

(load-files "utils") 
+0

Я пробовал с кодом выше и получил ошибку ниже: Исключение из потока "main" java.lang.IllegalArgumentException: Не удалось разрешить имя_файла: Файл, компилирующий : (/ главная/пользователя/Проекты/Clojure/Clojure-1.5.1/file.clj: 2: 23) –

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