【问题标题】:How to get user input in Clojure?如何在 Clojure 中获取用户输入?
【发布时间】:2010-11-10 00:35:27
【问题描述】:

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

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

【问题讨论】:

  • BTW - 对 read-line 不是特别有用 - 但(doc 函数)将打印函数的用法和文档,例如(文档阅读行)。

标签: clojure user-input


【解决方案1】:

read-line 是正确的函数..

(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 知识的极限!

【讨论】:

    【解决方案2】:

    还请记住,您可以访问所有 J​​ava ...

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

    System.console() 方式:

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

    BufferedReader方式:

    (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 来获取用户输入...

    【讨论】:

    • 那么能够调用System.console()的getPassword()/readLine()是什么?说真的,问题在于如何在 Clojure 中获取用户输入……一种 JVM 语言。
    • 呃,这就是 Clojure 必须与 Java 相遇的地方。如果你打算像这样编写 Clojure,你还不如什么都不用。
    • 天啊,这里不喜欢 java 互操作。这是一个很好的答案,花生画廊的劝阻是不必要的。你认为 read-lines 是如何实现的?当然是通过 BurfferedReaders 完成的。
    • Clojure 会自动关闭BufferedReader吗?
    • @mzuther 好的,我明白了,那么答案可能会关闭读者:)
    【解决方案3】:

    read-line 用于获取用户输入并使用 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) ))
    

    【讨论】:

    • 您不应该使用read-line 来读取密码。请改用(.readPassword (System/console) "password: ") 的变体来掩盖控制台上的密码。
    猜你喜欢
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多