在涉及Clojure时,我已经编写了一个非常基本的程序来回应用户输入的内容.然而,它并没有以我认为自然的方式运行.这是代码:
(defn goo [] (print "echo> ") (def resp (read-line)) (print resp) )
我希望代码能够像这样运行(对我来说输入foo
为输入read-line
):
user=> (goo) echo> foo foonil
但相反,回声和读取线被切换:
user=> (goo) foo echo> foonil
为什么会这样?我缺少一个微妙的东西吗?
编辑:从Joe的回答,更新的正确解决方案是:
(defn goo [] (print "echo> ") (flush) (def resp (read-line)) (print resp) (flush) )
此外,如果您使用println
而不是冲洗,则不需要冲洗print
.
我对clojure一无所知,但这听起来像是缓冲区没有被冲洗的情况.弄清楚打印后如何冲洗标准输出.println函数可能在每行结束时刷新.尝试:
(defn goo [] (print "echo> ") (flush ) (def resp (read-line)) (print resp) )
另外,请不要使用"def",除非你真的,真的想定义一个全局变量.改为使用"let":
(defn goo [] (print "echo> ") (flush) (let [resp (read-line)] (print resp) (flush)))
或者,更短
(defn goo [] (print "echo> ") (flush) (print (read-line)) (flush))