Clojure';s(读取行)返回nil;不提示

Clojure';s(读取行)返回nil;不提示,clojure,Clojure,我正在做我的第一个正式的Clojure程序——一个国际象棋游戏。我有以下资料: (defn human-move [board] (board-utils/print-board board) (print "Enter your move, like this: 'E7 E5' ...") (loop [raw-move (terminal-input)] ;;(read-line)] (println "I just received" raw-move) (if

我正在做我的第一个正式的Clojure程序——一个国际象棋游戏。我有以下资料:

(defn human-move [board]
  (board-utils/print-board board)
  (print "Enter your move, like this: 'E7 E5' ...")
  (loop [raw-move (terminal-input)] ;;(read-line)]
    (println "I just received" raw-move)
    (if (re-matches #"[A-H][1-8]\s[A-H][1-8]" raw-move)
      (parse-move raw-move)
      (do
        (println "Invalid format! There should be a letter, number, space, letter, and final number.")
        (print "Try again: ")
        (recur (read-line))))))
注意注释掉
读取行
的位置,并将其替换为
终端输入
<代码>读取行给了我一个NullPointerException,因此出于诊断目的:

(defn terminal-input []
  (println "input")
  (let [whatnot (read-line)]
    (println "received" whatnot)
    whatnot))
然后,当我调用
人类移动

...
+---+---+---+---+---+---+---+---+
| P | P | P | P | P | P | P | P |
+---+---+---+---+---+---+---+---+
| R | N | B | Q | K | B | N | R |
+---+---+---+---+---+---+---+---+
Enter your move, like this: 'E7 E5' ...input
received nil
I just received nil
我从来没有机会输入一些东西作为输入。如果是Java,我会开始玩垃圾收集器的小游戏(比如调用
Scanner.next()
),但是对于Clojure,除了把
(flush)
放在垃圾收集器里,我不知道该怎么做

值得一提的是,这是用黏液做的


我还试图让
终端输入
提供虚拟数据,并了解到我显然在错误地使用
循环
/
重现
。不过,我还没有彻底调查过它,因为我被
阅读行
问题分散了注意力。


提前感谢。

阅读行在粘液中不起作用。我找不到关于这一点的讨论线索,但这是真的。

如果您像这样在swank.core/with-read-line-support中包装对read-line的调用,那么swank clojure 1.4.0-SNAPSHOT现在就可以使用了

(with-read-line-support (println "a line from Emacs:" (read-line))

这终于对我起作用了:

(swank.core/with-read-line-support
   (read-line))

砰。嗯…有什么解决办法吗?用Java的Scanner类玩游戏值得吗?看一看-有点旧,但可能仍然有用。他们说:“但是我刚刚给lein repl推了一个错误修复,现在我在repl中读到了行。让我知道在最新的1.4.0-SNAPSHOT中它是否对您有效。”所以在project.clj中,我更改了
:dev dependencients[[swank clojure“1.2.1”]]
…swank clojure“1.4.0-SNAPSHOT
。然后我运行
lein deps&&lein swank
,与Emacs重新连接,但仍然存在问题。值得一提的是:
$lein version
Java 1.6.0\u 24 Java HotSpot(TM)上的Leiningen 1.5.264位服务器虚拟机我真的不确定如何处理他们提到的telnet业务。我想我应该和lein邮件列表谈谈?该线程是关于一种与从stdin读取lein repl.AFAIC无关的问题,从连接到Slime repl的输入流读取根本没有实现swank-clojure.Btw,我已经还添加了从minibuffer读取和y-or-n-p支持。这太棒了。我期待着有理由尝试这个。