Работая в 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
.