2012-04-19 62 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