2012-04-19 16 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。 – 2012-04-19 19:47:53

+0

如果我的問題不清楚,我很抱歉,但這不是我要問的。我想知道爲什麼'退出'有時是**,但並非全部。 – 2012-04-19 20:02:14

+1

我確認了你的問題,但不知道它爲什麼會發生。我在Java 1.6.0_20上使用Clojure 1.3.0和lein Leiningen 1.7.1 OpenJDK客戶端虛擬機 – octopusgrabbus 2012-04-19 20:20:50

回答

5

這似乎是因爲leiningen.core命名空間不可用當有項目時。更具體地說,當有項目時,您的項目代碼是evaluated in a separate ClassLoader,只有您的項目在類路徑中。因此沒有Leiningen的功能可用。

Leiningen 2 REPL沒有這個問題。

+0

謝謝。這是很好的知道。 – octopusgrabbus 2012-04-19 21:43:25

相關問題