Clojure中带有read行的表达式的评估顺序

时间:2014-06-25 01:42:01

标签: clojure

我正在运行以下代码段:

(print "Enter something:")
(let [entry (read-line)]
  (println "You entered" entry)
)

我希望看到以下类型的互动:

Enter something:abc
You entered abc

相反,我明白了:

abc
Enter something:You entered abc

为什么首先请求用户输入,即使打印首先出现在代码中?我尝试使用谷歌搜索,但据我所知,评估顺序应该是我期望来自Java / Python背景。这是代码的预期行为吗?

1 个答案:

答案 0 :(得分:2)

将我的评论粘贴到一个真实的答案中。

Java在\n上刷新stdout。如果你想要输出的话,你需要强制刷新缓冲区(一致读取,因为你无法控制它),就像你在你的例子中写的一样,或者你可以使用{{1}添加\n }或(println ...)

请参阅:Will Java's System.out.print() buffer forever until println()?