Warum werden Zeichenfolgen, die in clojure mit 'print' gedruckt wurden, erst in meiner Konsole angezeigt, nachdem ich println verwendet habe?

Ich habe den folgenden Code in Clojure:

(do
    (println "starting....")
    (sig! a 0)
    (sig! b 0)
    (future
      (Thread/sleep 4000)
      (println "switch 1")
      (sig! a 1)
      (sig! b 0)
      (Thread/sleep 4000)
      (println "switch 2")
      (sig! a 0)
      (sig! b 1)
      (Thread/sleep 4000)
      (println "switch 3")
      (sig! a 1)
      (sig! b 1)) nil))

Ich habe einige Beobachter, die sich die Atome a, b, s und c1 anhören und sich einige Zeichenfolgen ausdrucken, wenn sie sich ändern. Verwenden(print (str uid ":" @o "\n") oder die gedruckte Version. Die Clojure Docs sagenprint undprintln sollte sich genau so verhalten, mit Ausnahme des Zeilenumbruchs inprintlnDas sehe ich aber nicht. Wenn der Beobachter verwendetprintln Ich sehe die Saiten sofort. Wenn der Beobachter verwendetprint. Ich sehe die Ausgabe erst beim nächstenprintln wird genannt. Unten habe ich die Ausgabe mitprintln vs mitprint. Mitprint Ich sehe nur die Werte bis zum letztenprintln.

starting....
switch 1
a:1
s:1
switch 2
a:0
b:1
s:0
s:1
switch 3 

Jetzt mit println

starting....
switch 1
a:1

s:1

switch 2
a:0
b:1


s:0

s:1

switch 3
a:1

s:0

c1:1

Wie Sie sehen, werden die von den Beobachtern aufgenommenen Änderungen in diesem Fall gedruckt. Ich benutze Clojure 1.5. Es scheint fast wie einprint erfordert eineprintln seinen Inhalt auf die Konsole zu spülen.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage