2012-04-19 1 views
4

Сегодня я заметил что-то странное. Когда я не «в» проект (то есть, оболочка не находится в директории по Clojure проекта), я могу использовать exit для выхода из REPL:Почему `(exit)` не всегда доступен в REPL?

shell$ lein repl 
REPL started; server listening on localhost port 43712 
user=> (+ 3 4) 
7 
user=> (exit) 
shell$ echo '<span>not in <s>kansas</s>clojure anymore</span>' 

Когда я «в» проект (то есть, оболочка находится в директории по Clojure проекта), я не могу использовать exit:

shell$ cd my_clojure_project 
shell$ lein repl 
REPL started; server listening on localhost port 69237 
user=> (* 8 4) 
32 
user=> (exit) 
java.lang.Exception: Unable to resolve symbol: exit in this context (NO_SOURCE_FILE:2) 
user=> 

что такое проблема здесь?


версия Clojure (для обоих примеров):

user=> (clojure-version) 
"1.2.1" 

версия Leiningen (для обоих примеров):

shell$ lein -v 
Leiningen 1.6.1 on Java 1.6.0_26 Java HotSpot(TM) 64-Bit Server VM 
+0

Похоже, что «Выход» просто выходит из текущей «оболочки». EXIT-CEPTION. –

+0

Прошу прощения, если мой вопрос непонятен, но это не то, о чем я прошу. Я хотел бы знать, почему 'exit' ** иногда ** по объему, но не все время. –

+1

Я подтвердил вашу проблему, но не знаю, почему это происходит. Я использую Clojure 1.3.0 и lein Leiningen 1.7.1 на Java 1.6.0_20 OpenJDK Client VM – octopusgrabbus

ответ

5

Это, кажется, потому что leiningen.core имен не доступен когда есть проект. Более конкретно, когда есть проект, код вашего проекта: evaluated in a separate ClassLoader, только ваш проект по пути к классам. Поэтому ни одна из функций Leiningen не доступна.

Leiningen 2 REPL не имеет этой проблемы.

+0

Спасибо. Это хорошо знать. – octopusgrabbus

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