Estoy escribiendo un juego de texto en Clojure. Quiero que el jugador escriba líneas en la consola y que el juego responda línea por línea.Clojure (línea de lectura) no espera la entrada
La investigación me mostró que (read-line)
es la forma en que uno está destinado a obtener líneas de texto de entrada estándar en Clojure, pero no funciona para mí.
estoy en un proyecto Leiningen fresco, y he añadido una cláusula :main
a la project.clj
que apunta hacia el único archivo de origen:
(ns textgame.core)
(defn -main [& args]
(println "Entering -main")
; (flush) ;makes no difference if flush are commented out
(let [input (read-line)]
(println "ECHO:" input))
; (flush)
(println "Exiting -main"))
usando lein run
rendimientos:
Entering -main
ECHO: nil
Exiting -main
En otras palabras , no hay oportunidad de ingresar texto en la consola para que lea (read-line)
.
¿Cómo hago para que Clojure espere a que se ingresen los caracteres y la línea nueva y se devuelve la cadena correspondiente?
(estoy usando GNOME 2.32.1 Terminal en Linux Mint 11, Leiningen 1.6.1.1 en Java 1.6.0_26 de Java HotSpot (TM) de 64 bits del servidor VM, Clojure versión 1.2.1.)
actualización : Si ejecuto lein repl
, puedo (println (read-line))
, pero no cuando tengo una función -main
y la ejecuto usando lein run
.
posible duplicado de [Clojure (read-line) devuelve nil; no solicita] (http: // stackoverflow.com/questions/5861373/clojures-read-line-returns-nil-does-not-prompt) – amalloy
@amalloy La mejor conjetura en la respuesta a la que se vinculó fue que era un problema con swank-clojure/SLIME. No estoy usando ninguno de esos. – dukereg
¿Ha intentado ejecutar el script directamente con java -cp clojure.jar clojure.main /path/to/myscript.clj para descartar otros problemas y centrarse en los problemas de ejecución de lein? – jneira