Clojure中带读行表达式的求值顺序
我正在运行以下代码段:Clojure中带读行表达式的求值顺序,clojure,Clojure,我正在运行以下代码段: (print "Enter something:") (let [entry (read-line)] (println "You entered" entry) ) 我希望看到以下类型的交互: Enter something:abc You entered abc 相反,我看到: abc Enter something:You entered abc 为什么在代码中,即使打印是第一位的,用户输入也是第一位被请求的?我试着在谷歌上搜索,但据我所知,评估顺序应该是
(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背景下的预期顺序。这是代码的预期行为吗?只是将我的注释粘贴到真实答案中
Java在
\n
上刷新标准输出。如果您希望输出与您在示例中编写的完全一致(读取一致,因为您无法控制),则需要强制刷新缓冲区,或者您可以使用(println…
或(print…\n”)
添加\n
参见:Aha——副作用。很抱歉重复了这个问题,我仍在习惯这个术语。Java在
\n
上刷新标准输出。如果您希望输出与您在示例中编写的完全一致(读取一致,因为您无法控制),则需要强制刷新缓冲区,或者您可以使用(println…
或(print…\n”)
添加\n
。参见:麦克斯,没有必要为这样重复的问题道歉。我们不会在字典中剔除同义词。