2015-09-11 4 views
0

Я немного новичок Clojure, и что-то в REPL действительно меня смущает.Clojure REPL забывает путь к классам

У меня есть проект под названием «misc» и пространство имен в «misc/src/counter_window.clj». Когда я войти в REPL из корневой папки проекта Я хочу импортировать функции counter_window, но я, кажется, должен пройти следующие странные танго каждый раз:

user=> (use 'counter-window) 
FileNotFoundException Could not locate counter_window__init.class or counter_window.clj on classpath. Please check that namespaces with dashes use underscores in the Clojure file name. clojure.lang.RT.load (RT.java:449) 

user=> (use 'misc.counter-window) 

CompilerException java.lang.Exception: namespace 'misc.counter-window' not found after loading '/misc/counter_window', compiling:(/tmp/form-init2530455467319465680.clj:1:1) 
user=> (use 'counter-window) 
nil ;; the import succeeds this third time. 

Предупреждение в исключении FileNotFound не кажется , потому что пространство имен называется counter-window в файле counter_window.clj.

Так почему это происходит? Почему импорт не работает в первый раз, но затем преуспеть в третий раз?

ответ

1

Я думаю, что существует прямая связь между пути файла и пространством имен. Файл src/counter_window.clj должен иметь объявление пространства имен (ns counter-window).

Пространство имен misc.counter-window должно быть определено в файле src/misc/counter_window.clj. т.е. он будет иметь форму (ns misc.counter-window). Обратите внимание, что misc - это папка внутри src. На ваш проект можно назвать что угодно, я не думаю, что это повлияет на пространства имен.

Предполагая, что вы хотели было имен misc.counter-window и файл, соответственно, на src/misc/counter_window.clj следующие работы в РЕПЛ

(use '[misc.counter-window]) 
+0

Я пропускал 'misc.' в пространстве имен! – RGrun

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