Clojure - Nebenwirkungen, die nicht in Ordnung sind
Während ich mich in Clojure versuche, habe ich ein sehr einfaches Programm geschrieben, um alle Eingaben des Benutzers zu wiederholen. Es läuft jedoch nicht in einer Weise, die ich als natürlich empfinde. Hier ist der Code:
(defn goo []
(print "echo> ")
(def resp (read-line))
(print resp)
)
Ich würde erwarten, dass der Code so läuft (für mich @ eintippenfoo
als Eingabe fürread-line
):
user=> (goo)
echo> foo
foonil
Aber stattdessen wird das Echo und die Lesezeile umgeschaltet:
user=> (goo)
foo
echo> foonil
Warum passiert das? Gibt es eine Subtilität, die ich vermisse?
EDIT: Nach Joes Antwort lautet die aktualisierte korrekte Lösung:
(defn goo []
(print "echo> ")
(flush)
(def resp (read-line))
(print resp)
(flush)
)
Auch die Flushes sind nicht notwendig, wenn Sie @ verwendprintln
Anstatt vonprint
.