Clojure 如何创建从字符串而不是文件或url读取的输入流

Clojure 如何创建从字符串而不是文件或url读取的输入流,clojure,inputstream,Clojure,Inputstream,我想将*中的*绑定到从字符串而不是“真实”输入流读取的流。如何执行此操作?使用in str签出: ClojureDocs有一个使用示例: ;; Given you have a function that will read from *in* (defn prompt [question] (println question) (read-line)) user=> (prompt "How old are you?") How old are you? 34

我想将*中的
*绑定到从字符串而不是“真实”输入流读取的流。如何执行此操作?

使用in str签出

ClojureDocs有一个使用示例:

;; Given you have a function that will read from *in*
(defn prompt [question]
  (println question)
  (read-line))

user=> (prompt "How old are you?")
How old are you?
34                   ; <== This is what you enter
"34"                 ; <== This is returned by the function

;; You can now simulate entering your age at the prompt by using with-in-str

user=> (with-in-str "34" (prompt "How old are you?"))
How old are you?
"34"                 ; <== The function now returns immediately 
;;假设你有一个函数,可以从中读取**
(问题)
(质询)
(读行)
user=>(提示“您多大了?”)
你多大了?

34 ; 下面是我最后所做工作的示例代码。这个想法是一个简单的服务器读取/打印循环函数,它接受输入和输出流。我的问题是如何为这样一个函数生成测试流,我认为字符串函数就可以了。相反,这是我所需要的:

(ns test
    (:use [clojure.java.io :only [reader writer]]))
(def prompt ">")
(defn test-client [in out]
  (binding [*in* (reader in)
            *out* (writer out)]
           (print prompt) (flush)

(loop [input (read-line)]
             (when input
               (println (str "OUT:" input))
               (print prompt) (flush)
               (if (not= input "exit\n") (recur (read-line)) )
               ))))
(def client-stream (java.io.PipedWriter.))
(def r (java.io.BufferedReader. (java.io.PipedReader. client-stream)))
(doto (Thread. #(do (test-client r *out*))) .start)

(.write client-stream "test\n")

谢谢这是问题的正确答案,但我最终真正需要的是一点不同。请看下面的答案。您是否也可以添加一个示例,因为您提供的链接也没有。Clojuredocs有一个示例: