2009-07-11 6 views
34

Tôi hiện đang học clojure, nhưng tôi đã tự hỏi làm thế nào để có được và lưu trữ đầu vào của người dùng trong một chương trình clojure. Tôi đã nhìn vào api clojure và tôi tìm thấy một chức năng được gọi là đọc-line, tuy nhiên tôi không chắc làm thế nào để sử dụng nó nếu đó là chức năng đúng để sử dụng ...Làm cách nào để nhận dữ liệu nhập của người dùng trong Clojure?

Nhưng làm cách nào để bạn nhận được đầu vào của người dùng clojure?

+0

BTW - không đặc biệt hữu ích cho read-line - nhưng (chức năng doc) sẽ in việc sử dụng và tài liệu cho hàm, ví dụ (doc read-line). – flatline

Trả lời

44

read-line là chức năng đúng ..

(println (read-line)) 

..would cơ bản tiếng vang cho người sử dụng đầu vào:

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

Để sử dụng nó trong một câu lệnh if, bạn có thể muốn sử dụng để:

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

Hy vọng điều đó đủ để giúp bạn bắt đầu, vì đó là giới hạn về kiến ​​thức Clojure của tôi !

25

Cũng cần nhớ rằng bạn có quyền truy cập vào tất cả các Java ...

OK vì vậy có lẽ tôi nên trình bày một số ví dụ ... kỹ năng clojure của tôi là không tốt do đó, những ví dụ có thể cần một chút tinh chỉnh.

Các System.Console() cách:

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

Các BufferedReader cách:

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

Quan điểm của tôi là người ta có thể tận dụng kiến ​​thức của Java, và Java chính nó, trong Clojure. Đó là một trong những thế mạnh chính, được quảng cáo của nó.

Tự hỏi điểm số của tôi sẽ là gì nếu câu hỏi về đầu vào của người dùng từ GUI!

Bằng cách này, bạn có thể sử dụng JOptionPane để đưa lên một chút để có được giao diện người dùng nhập vào ...

+4

Vì vậy, có thể gọi hàm GetPassword()/readLine() của System.console() là gì? Nghiêm túc, câu hỏi là về việc nhập người dùng vào Clojure ... một ngôn ngữ JVM. – Allen

+0

Rất tiếc. Đó nên là readPassword() ở trên. – Allen

+8

Uh, đây là nơi Clojure * có * để gặp Java. Nếu bạn đang đi chương trình Clojure như thế này, bạn cũng có thể sử dụng không có gì. – Allen

1

read-line được sử dụng để có được đầu vào người dùng và sử dụng chúng ta hãy để ràng buộc nó vào một số biến.

Ví dụ: nếu bạn muốn đọc ID người dùng và mật khẩu từ người dùng và hiển thị nó, bạn có thể sử dụng đoạn mã sau

(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

Bạn không nên sử dụng 'read-line' để đọc mật khẩu. Sử dụng một biến thể của '(.readPassword (System/console) 'mật khẩu:") 'thay vào đó để che dấu mật khẩu trên bàn điều khiển. – bfontaine