1

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

1 回答 1

1

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

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

于 2014-03-04T21:03:24.233 回答