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))