2009-07-11 7 views
34

Attualmente sto imparando il clojure, ma mi chiedevo come ottenere e memorizzare l'input dell'utente in un programma clojure. Stavo guardando l'API del clojure e ho trovato una funzione chiamata read-line, tuttavia non sono sicuro di come usarlo se è la funzione giusta da usare ...Come ottenere l'input dell'utente in Clojure?

In ogni caso, come si ottiene l'input dell'utente in clojure?

+0

BTW - non è particolarmente utile per la lettura-line - ma (funzione doc) stamperà l'uso e la documentazione per la funzione, ad es (doc linea di lettura). – flatline

risposta

44

read-line è la funzione giusta ..

(println (read-line)) 

..would fondamentalmente eco l'ingresso degli utenti:

Clojure 1.0.0- 
user=> (println (read-line)) 
this is my input 
this is my input 

di utilizzarlo in un'istruzione if, si sarebbe probabilmente usare lasciare:

(let [yayinput (read-line)] 
    (if (= yayinput "1234") 
    (println "Correct") 
    (println "Wrong"))) 

Spero che sia sufficiente per iniziare, perché si tratta del limite della mia conoscenza Clojure !

25

Ricordate anche che si ha accesso a tutti i Java ...

OK quindi forse dovrei presentare alcuni esempi ... le mie competenze Clojure non sono buoni così questi esempi possono avere bisogno di un po 'di tweaking.

Il System.Console() modo:

(let [console (. System console) 
    pwd (.readPassword console "tell me your password: ")] 
    (println "your password is " pwd)) 

Il BufferedReader modo:

(print "give me a line: ") 
(let [reader (java.io.BufferedReader. *in*) 
    ln (.readLine reader)] 
    (println "your line is " ln)) 

Il mio punto è che si può sfruttare la conoscenza di Java e Java stesso, in Clojure. È uno dei suoi principali punti di forza pubblicizzati.

Mi chiedo quale sarebbe stato il mio punteggio se la domanda riguardasse l'input dell'utente da una GUI!

Tra l'altro, è possibile utilizzare JOptionPane di mettere su un po 'interfaccia grafica per ottenere l'input dell'utente ...

+4

Quindi essere in grado di chiamare getPassword() di System.console()/readLine() è cosa? Seriamente, la domanda è di ottenere l'input dell'utente in Clojure ... una lingua JVM. – Allen

+0

Oops. Dovrebbe essere readPassword() sopra. – Allen

+8

Uh, questo è dove Clojure * ha * per soddisfare Java. Se stai programmando Clojure in questo modo, potresti anche non usare nulla. – Allen

1

lettura-line è usato per ottenere l'input dell'utente e l'uso lasciare di legarsi a qualche variabile.

Per esempio: se si desidera leggere l'ID utente e la password utente e la visualizzazione, è possibile utilizzare il seguente pezzo di codice

(defn print-message [pid pw] 
(println "PID : " pid) 
(println "PW : " pw)) 

(defn inp[] 
(println "Enter your PID and password") 
(let[pid (read-line) pw (read-line)] 
(print-message pid pw))) 
+0

Non si deve usare 'read-line' per leggere una password. Utilizzare una variante della password '(.readPassword (System/console)": ") invece di mascherare la password sulla console. – bfontaine