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 inprintln
Das 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.