我正在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
运行时 .
4 回答
我有类似的问题,并采取 Build 一个jar文件然后运行它 .
它有点慢,虽然它让我解开了 . 从repl开始的答案会更好
试试"lein trampoline run" . 有关https://github.com/technomancy/leiningen的更多详细信息,请参见http://groups.google.com/group/leiningen/browse_thread/thread/a07a7f10edb77c9b:
使用带有读取线支持的宏来包装您的读取线调用,现在在ns swank.core [自swank-clojure 1.4我相信]:
感谢Tavis Judd的修复 .
不确定问题的lein方面,但绝对在emacs中不可能使stdin工作 . 但是,如果你想从用户那里获得文本,你可以使用JOptionPane轻松地完成它,就像我的小小的tic-tac-toe程序中的代码一样: