为什么尝试使用BufferedReader冻结Leiningen REPL从控制台读取一行?
lein repl
nREPL server started on port 65142
REPL-y 0.2.0
Clojure 1.5.1
Docs: (doc function-name-here)
(find-doc "part-of-name-here")
Source: (source function-name-here)
Javadoc: (javadoc java-object-or-class-here)
Exit: Control+D or (exit) or (quit)
user=> (import [java.io BufferedReader BufferedWriter InputStreamReader])
java.io.InputStreamReader
user=> (.readLine (BufferedReader. (InputStreamReader. System/in)))
答案 0 :(得分:1)
调用lein repl
实际上启动了一个新的后台服务器进程来评估代码;您在控制台中看到的是一个客户端进程,它将代码发送到服务器进行评估,然后显示返回的结果。我怀疑这里发生的是,当REPL服务器评估System/in
时,它实际上是指服务器进程的stdin,你无法从客户端写入。
使用(InputStreamReader. System/in)
替换*in*
应该允许您的代码在REPL以及使用lein run
或java
直接启动时使用。