如何在Clojure中获取用户输入?

如何在Clojure中获取用户输入?,clojure,user-input,Clojure,User Input,我目前正在学习clojure,但我想知道如何在clojure程序中获取和存储用户输入。我在查看clojure api时发现了一个名为read line的函数,但是如果它是正确的函数,我不确定如何使用它 无论如何,如何在clojure中获得用户输入?是正确的函数 (println (read-line)) …基本上会响应用户的输入: Clojure 1.0.0- user=> (println (read-line)) this is my input this is my input

我目前正在学习clojure,但我想知道如何在clojure程序中获取和存储用户输入。我在查看clojure api时发现了一个名为read line的函数,但是如果它是正确的函数,我不确定如何使用它

无论如何,如何在clojure中获得用户输入?

是正确的函数

(println (read-line))
…基本上会响应用户的输入:

Clojure 1.0.0-
user=> (println (read-line))
this is my input
this is my input
要在if语句中使用它,您可能需要使用let:

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

希望这足以让你开始,因为这是我Clojure知识的极限

还请记住,您可以访问所有Java

好吧,也许我应该举一些例子。。。我的clojure技能不好,因此这些示例可能需要一些调整

System.console()方式:

(let [console (. System console)
     pwd (.readPassword console "tell me your password: ")]
   (println "your password is " pwd))
(print "give me a line: ")
(let [reader (java.io.BufferedReader. *in*)
     ln (.readLine reader)]
   (println "your line is " ln))
BufferedReader方式:

(let [console (. System console)
     pwd (.readPassword console "tell me your password: ")]
   (println "your password is " pwd))
(print "give me a line: ")
(let [reader (java.io.BufferedReader. *in*)
     ln (.readLine reader)]
   (println "your line is " ln))
我的观点是,可以在Clojure中利用Java知识和Java本身。这是它的主要优势之一

想知道如果问题是关于GUI的用户输入,我的分数会是多少


顺便说一下,您可以使用JOptionPane安装一个小GUI来获取用户输入…

读取行用于获取用户输入,并使用let将其绑定到某个变量

例如:如果您想从用户处读取用户ID和密码并显示它,您可以使用以下代码

(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) ))

顺便说一句-对读取行没有特别的帮助-但是(doc函数)将打印函数的用法和文档,例如(doc读取行)。所以能够调用System.console()的getPassword()/readLine()是什么?说真的,问题是如何在Clojure中获得用户输入。。。一种JVM语言。嗯,这就是Clojure必须与Java相遇的地方。如果您打算像这样编写Clojure,那么最好在这里使用nothing.geez,不喜欢java互操作。这是一个很好的答案,花生画廊的劝阻是不必要的。您认为读行是如何实现的?这当然是用BurfferedReaders完成的。Clojure是否会自动关闭
BufferedReader
?@mzuther好的,我明白了,那么答案可能应该是关闭读取器:)你不应该使用
read line
读取密码。改为使用
(.readPassword(系统/控制台)“password:”)
的变体,以屏蔽控制台上的密码。