Piszę grę tekstową w Clojure. Chcę, żeby gracz pisał linie na konsoli, a gra odpowiadała liniowo.Clojure (read-line) nie czeka na dane wejściowe
Badania wykazały, że (read-line)
jest sposobem, w jaki można uzyskać linie tekstu ze standardowego wejścia w Clojure, ale to nie działa dla mnie.
Jestem w świeżym projekcie Leiningen i dodałem :main
klauzuli do project.clj
skierowaną do jedynego pliku źródłowego:
(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"))
wykorzystaniem lein run
plonów:
Entering -main
ECHO: nil
Exiting -main
Innymi słowy , nie ma możliwości wprowadzania tekstu na konsoli, aby przeczytać (read-line)
.
Jak ustawić Clojure, aby czekał na wprowadzenie znaków i linii i zwrócił odpowiedni ciąg znaków?
(używam GNOME Terminal 2.32.1 na Linux Mint 11, Leiningen 1.6.1.1 na Java 1.6.0_26 Java HotSpot (TM) 64-bitowy serwer VM, Clojure wersji 1.2.1.)
Aktualizacja : Jeśli uruchomię lein repl
, mogę (println (read-line))
, ale nie, gdy mam funkcję -main
i uruchomić przy użyciu lein run
.
możliwy duplikat [Clojure (read-line) zwraca zero; nie pyta] (http: // stackoverflow.com/questions/5861373/clojures-read-line-return-nil-does-not-prompt) – amalloy
@amalloy Najlepszym domysłem w odpowiedzi, z którą się łączyłeś, było to, że był to problem z swank-clojure/SLIME. Nie używam żadnego z nich. – dukereg
Czy próbowałeś uruchomić skrypt bezpośrednio z java -cp clojure.jar clojure.main/path /to/myscript.clj, aby odrzucić inne problemy i skupić się na problemach z uruchamianiem linii? – jneira