【发布时间】:2011-12-04 04:29:14
【问题描述】:
我正在用 Clojure 编写一个文本游戏。我希望玩家在控制台上输入台词,然后游戏会逐行响应。
研究表明(read-line) 是一种用于从 Clojure 中的标准输入中获取文本行的方式,但它不适用于我。
我在一个新的 Leiningen 项目中,我在 project.clj 中添加了一个 :main 子句,指向唯一的源文件:
(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"))
使用lein run 产生:
Entering -main
ECHO: nil
Exiting -main
换句话说,没有机会在控制台输入文本供(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 运行时则不行。
【问题讨论】:
-
@amalloy 您链接到的答案中最好的猜测是这是 swank-clojure/SLIME 的问题。我没有使用其中任何一个。
-
你有没有试过直接用 java -cp clojure.jar clojure.main /path/to/myscript.clj 运行脚本来放弃其他问题,专注于 lein run 问题?
-
@jneira 这似乎是 lein run 的问题。感谢您的建议。
标签: clojure console-application user-input leiningen