Рассмотрим очень простое определение функции в Clojure:Как создать простой userprompt в Clojure
(defn prompt []
(print ">>> ")
(read-line))
Моя цель, чтобы позволить пользователю ввести строку вставляться перед посредством безотлагательного-приставкой. Тем не менее, кажется, что read-line
исполняется перед оператором print
. Однако путем промывки выходного потока
(defn prompt []
(print ">>> ")
(flush)
(read-line))
Эта функция работает по назначению. Почему мне вручную нужно сбросить из для того, чтобы «>>>» было выписано? Согласно документам, функции и do
должны выполнять выражения в порядке.
Это обычная ситуация для буферизованного вывода для любого языка. Даже C++ имеет функцию флеша. Буферизованный выход предназначен для повышения производительности за счет потери синхронизации между потоком и выходом программы. Поэтому, если вы хотите быть уверенным, что вывод печатается, вам нужно свернуть. – JustAnotherCurious