相关疑难解决方法(0)

为什么在使用lein run命中ENTER(看起来像挂起)后读取行不返回,但是与lein repl一起工作?

手头的问题在于,当我运行我的程序时,lein run它会进入(read-line)部分并且我无法摆脱它,这意味着:read-line永远不会返回.

这是相关代码:

(def command (atom ""))

(defn print-prompt []
  (print "prompt> ")
  (flush)
)

(defn ask-for-input []
    (print-prompt)
    (let [x (str (read-line))]
      (println (str "User input: " x))
      (reset! command x)
    )
)
Run Code Online (Sandbox Code Playgroud)

我从未在屏幕上看到"用户输入:"字符串.奇怪的是,如果我运行lein repl并调用(ask-for-input)它然后它正常工作:S

clojure leiningen

7
推荐指数
1
解决办法
714
查看次数

Clojure(读取行)不等待输入

我正在Clojure写一个文本游戏.我希望玩家在控制台上输入线条,并让游戏逐行响应.

研究表明,这(read-line)是一种在Clojure中从标准输入中获取文本行的方式,但它对我不起作用.

我在一个新的Leiningen项目中,我已经添加了一个指向唯一源文件的:main子句project.clj:

(ns textgame.core)

(defn -main [& args]
  (println "Entering -main")
;  (flush)                      ;makes no difference if flush are commented out
  (let [input (read-line)]
    (println "ECHO:" input))
;  (flush)
  (println "Exiting -main"))
Run Code Online (Sandbox Code Playgroud)

使用lein run产量:

Entering -main
ECHO: nil
Exiting -main
Run Code Online (Sandbox Code Playgroud)

换句话说,没有机会在控制台输入文本(read-line)进行阅读.

我应该如何让Clojure等待输入字符和换行符并返回相应的字符串?

(我在Linux Mint 11上使用GNOME Terminal 2.32.1,在Java 1.6.0_26 Java HotSpot(TM)64位服务器VM上使用Leiningen 1.6.1.1,Clojure 1.2.1版.)

更新:如果我跑lein repl,我可以(println (read-line)),但不是当我有一个-main功能并运行使用lein run.

user-input clojure console-application leiningen

5
推荐指数
2
解决办法
3129
查看次数