为什么REPL中并不总是提供`(exit)`?

Mat*_*ick 4 clojure exit leiningen

今天我发现奇怪的事.当我不在"在"项目(即,外壳是不是在Clojure的项目目录),我可以使用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>'
Run Code Online (Sandbox Code Playgroud)

当我"进入"一个项目(也就是说,shell在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=>
Run Code Online (Sandbox Code Playgroud)

这是什么问题?


Clojure版本(两个例子):

user=> (clojure-version)
"1.2.1"
Run Code Online (Sandbox Code Playgroud)

Leiningen版本(两个例子):

shell$ lein -v
Leiningen 1.6.1 on Java 1.6.0_26 Java HotSpot(TM) 64-Bit Server VM
Run Code Online (Sandbox Code Playgroud)

Jer*_*emy 5

这似乎是因为leiningen.core当有项目时命名空间不可用.更具体地说,当存在项目时,项目的代码将在单独的ClassLoader中进行评估,并且只有类路径上的项目.因此Leiningen的功能都不可用.

Leiningen 2 REPL没有这个问题.