Alors que je barbote dans Clojure, j'ai écrit un programme très basique pour faire écho à tout ce que l'utilisateur tape dedans. Cependant, cela ne fonctionne pas d'une manière que je perçois comme naturelle. Voici le code:Clojure - Les effets secondaires se produisent en dehors de l'ordre
(defn goo []
(print "echo> ")
(def resp (read-line))
(print resp)
)
j'attendre le code à courir comme ça (pour moi en tapant foo
comme l'entrée read-line
):
user=> (goo)
echo> foo
foonil
Mais au lieu, l'écho et lecture en ligne est commuté:
user=> (goo)
foo
echo> foonil
Pourquoi cela se produit-il? Y a-t-il une subtilité qui me manque?
EDIT: De la réponse de Joe, la bonne solution est mise à jour:
(defn goo []
(print "echo> ")
(flush)
(def resp (read-line))
(print resp)
(flush)
)
En outre, les bouffées ne sont pas nécessaires si vous utilisez println
au lieu de print
.
qui l'a fait! Ajouter (flush) après les impressions l'a obtenu. Merci pour la réponse rapide! –
Cool. Maintenant, j'ai une réponse vérifiée dans une langue que je ne connais pas. :-) Heureux d'avoir pu aider. – jmucchiello
bonnes compétences! Par curiosité de quelqu'un qui connaît Clojure mais pas le fonctionnement interne des tampons stdout ... pourquoi ce problème se produit-il? Semble étrange que la commande peut être changé dans un tampon ..... – mikera