Clojure - побочные эффекты, выходящие из строя
Работая с 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
.