在学习 Clojure 的过程中,我写了一个非常基础的程序,可以将用户输入的任何内容回显。然而,它的运行方式并不像我所感知到的那样自然。以下是代码:
(defn goo []
(print "echo> ")
(def resp (read-line))
(print resp)
)
我期望代码能像这样运行(当我将foo
作为 read-line
的输入时):
user=> (goo)
echo> foo
foonil
但是,反而交换了回显和读取行:
user=> (goo)
foo
echo> foonil
为什么会出现这种情况?我是否漏掉了一些微妙的东西?编辑:根据乔的答案,更新后的正确解决方案是:
(defn goo []
(print "echo> ")
(flush)
(def resp (read-line))
(print resp)
(flush)
)
如果你使用 println
而不是 print
,那么 flush 操作就不是必要的。