tutorial online framework example clojure

online - Clojure-Efectos secundarios sucediendo fuera de servicio



clojure web framework (2)

No sé nada de clojure, pero esto suena como un caso de búferes que no se sonrojan. Averigüe cómo vaciar el estándar después de la impresión. La función println probablemente se vacía al final de cada línea. Tratar:

(defn goo [] (print "echo> ") (flush ) (def resp (read-line)) (print resp) )

Mientras incursioné en Clojure, escribí un programa muy básico para hacer eco de lo que escriba el usuario. Sin embargo, no funciona de una manera que estoy percibiendo como natural. Aquí está el código:

(defn goo [] (print "echo> ") (def resp (read-line)) (print resp) )

Esperaría que el código se ejecute así (para mí, escribiendo foo como la entrada a read-line ):

user=> (goo) echo> foo foonil

Pero, en cambio, el eco y la línea de lectura se cambian:

user=> (goo) foo echo> foonil

¿Por qué pasó esto? ¿Hay una sutileza que me estoy perdiendo?

EDITAR: A partir de la respuesta de Joe, la solución correcta actualizada es:

(defn goo [] (print "echo> ") (flush) (def resp (read-line)) (print resp) (flush) )

Además, las descargas no son necesarias si usa println lugar de print .


Además, no use "def" a menos que realmente quiera definir una variable global. Use "dejar" en su lugar:

(defn goo [] (print "echo> ") (flush) (let [resp (read-line)] (print resp) (flush)))

o, más corto

(defn goo [] (print "echo> ") (flush) (print (read-line)) (flush))