2009-07-11 19 views
34

Obecnie uczę się clojure, ale zastanawiałem się, jak zdobyć i zapisać dane wejściowe użytkownika w programie clojure. Patrzyłem na api clojure i znalazłem funkcję o nazwie read-line, jednak nie jestem pewien, jak go użyć, jeśli jest to właściwa funkcja do używania ...Jak wprowadzić dane użytkownika do Clojure?

W jaki sposób uzyskać dane wejściowe użytkownika clojure?

+0

BTW - nie jest szczególnie pomocne dla odczytu linii - ale (funkcja doc) wydrukuje użycie i dokumentację dla funkcji, np (doc read-line). – flatline

Odpowiedz

44

read-line jest prawidłowa funkcja ..

(println (read-line)) 

..would zasadzie echa wkład użytkowników:

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

go używać w instrukcji if, którą prawdopodobnie używać pozwolić:

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

Mam nadzieję, że to wystarczy, aby zacząć, ponieważ to jest granica mojej wiedzy Clojure !

25

Pamiętaj też, że masz dostęp do wszystkich Java ...

OK więc może powinienem przedstawić kilka przykładów ... Clojure moje umiejętności nie są dobre, więc te przykłady mogą potrzebować trochę szczypanie.

System.console() sposób:

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

BufferedReader sposób:

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

Chodzi mi o to, że się można wykorzystać znajomość Java i Java, w Clojure. To jedna z głównych, reklamowanych zalet.

Zastanawiam się, jaki byłby mój wynik, gdyby pytanie dotyczyło wprowadzania danych przez użytkownika z GUI!

Nawiasem mówiąc, można użyć JOptionPane postawić trochę GUI, aby uzyskać dane wejściowe użytkownika ...

+4

Czy można zatem wywołać metodę getPassword()/readLine() System.console()? Poważnie, pytanie dotyczy wprowadzania danych użytkownika do Clojure ... języka JVM. – Allen

+0

Ups. To powinno być readPassword() powyżej. – Allen

+8

Uh, to tutaj Clojure * ma * spełniać Javę. Jeśli zamierzasz tak zaprogramować Clojure, równie dobrze możesz użyć niczego. – Allen

1

odczytu linia jest używana do pobierania danych wejściowych użytkownika i używać pozwolić powiązać go do jakiejś zmiennej.

Na przykład: jeśli chcesz czytać identyfikatora użytkownika i hasła użytkownika i wyświetlić go, można użyć następującego fragmentu kodu

(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

Nie powinieneś używać 'read-line' do odczytu hasła. Użyj wariantu '(.readPassword (System/console)" password: ")' zamiast tego, aby zamaskować hasło na konsoli. – bfontaine

Powiązane problemy