代码之家  ›  专栏  ›  技术社区  ›  missingfaktor Kevin Wright

控制台输入上的Leiningen冻结

  •  1
  • missingfaktor Kevin Wright  · 技术社区  · 11 年前

    为什么用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 回复  |  直到 11 年前
        1
  •  1
  •   Alex    11 年前

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

    更换 (InputStreamReader. System/in) 具有 *in* 应该允许您的代码从REPL工作,以及直接使用 lein run java .