Sto scrivendo un gioco di testo in Clojure. Voglio che il giocatore digiti le righe sulla console e che il gioco risponda linea per linea.Clojure (riga di lettura) non attende l'input
La ricerca mi ha mostrato che (read-line)
è il modo in cui si intende ottenere righe di testo dallo standard input in Clojure, ma non funziona per me.
Sono in un progetto di Leiningen fresco, e ho aggiunto una clausola :main
al project.clj
che punta alla sola file sorgente:
(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"))
utilizzando lein run
rendimenti:
Entering -main
ECHO: nil
Exiting -main
In altre parole , non è possibile immettere testo nella console per (read-line)
da leggere.
Come devo fare in modo che Clojure attenda l'inserimento di caratteri e newline e restituisca la stringa corrispondente?
(sto usando GNOME Terminal 2.32.1 su Linux Mint 11, Leiningen 1.6.1.1 su Java 1.6.0_26 di Java HotSpot (TM) a 64 bit di server VM, Clojure versione 1.2.1.)
Aggiornamento : Se eseguo lein repl
, posso (println (read-line))
, ma non quando ho una funzione -main
ed eseguo utilizzando lein run
.
possibile duplicato di [Clojure (read-line) restituisce nil; non richiede] (http: // StackOverflow.it/questions/5861373/clojures-read-line-returns-nil-does-not-prompt) – amalloy
@amalloy L'ipotesi migliore nella risposta a cui ci si è collegati era che si trattava di un problema con Swank-Clojure/SLIME. Non sto usando nessuno di questi. – dukereg
hai provato a eseguire lo script direttamente con java -cp clojure.jar clojure.main /path/to/myscript.clj per scartare altri problemi e concentrarti sui problemi di esecuzione di lein? – jneira