Leiningen在控制台输入上冻结

时间:2014-03-04 16:02:03

标签: clojure leiningen console-input

为什么尝试使用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)))

1 个答案:

答案 0 :(得分:1)

调用lein repl实际上启动了一个新的后台服务器进程来评估代码;您在控制台中看到的是一个客户端进程,它将代码发送到服务器进行评估,然后显示返回的结果。我怀疑这里发生的是,当REPL服务器评估System/in时,它实际上是指服务器进程的stdin,你无法从客户端写入。

使用(InputStreamReader. System/in)替换*in*应该允许您的代码在REPL以及使用lein runjava直接启动时使用。