Quiero vincular *in*
para transmitir la lectura de una cadena en lugar de la secuencia de entrada "real". ¿Cómo hago esto?Cómo creo una secuencia de entrada que lee desde una cadena en lugar de un archivo o url
10
A
Respuesta
14
Salida with-in-str
:
http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/with-in-str
ClojureDocs tiene un ejemplo de su uso:
;; 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
3
Aquí es código de ejemplo para lo que terminé haciendo. La idea es una función simple de lectura/impresión de bucles del servidor que toma una secuencia de entrada y salida. Mi problema era cómo generar secuencias de prueba para dicha función, y pensé que una función de cadena serviría. En cambio esto es lo que necesitaba:
(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")
Cuestiones relacionadas
- 1. Abrir una secuencia de IO desde un archivo local o url
- 2. Cómo creo un flujo de entrada desde un ZipEntry
- 3. ¿Cómo creo una matriz numpy a partir de una cadena?
- 4. Xerces analizar una cadena en lugar de un archivo
- 5. Cómo leer una secuencia de entrada http
- 6. ¿Cómo podría insertar una cadena en la secuencia de respuesta en cualquier lugar que desee?
- 7. ¿Cómo obtener una secuencia FILE * desde un descriptor de archivo?
- 8. ¿Hay una en secuencia de memoria que bloquea como una secuencia de archivo
- 9. Cargar plantilla desde una cadena en lugar de desde un archivo
- 10. ¿Cómo obtener una cadena json desde url?
- 11. ¿Cuál debería ser la codificación predeterminada para una API que lee desde una URL utilizando el archivo: protocolo?
- 12. ¿Cómo se escribe una función de PowerShell que se lee desde la entrada por canal?
- 13. ¿Cómo abrir una SQLiteConnection en una secuencia binaria en lugar de un archivo?
- 14. Cargando desde cadena en lugar de documento/url
- 15. ¿Cómo creo un org.xml.sax.InputSource a partir de una cadena?
- 16. ¿Cómo se realiza una entrada de formato rápido desde una secuencia en C++?
- 17. ¿Se puede cargar una App.Config desde una cadena o secuencia de memoria?
- 18. ¿Cómo creo una cadena hexagonal aleatoria que represente un color?
- 19. Descargar archivo de URL a una cadena
- 20. Lee un archivo binario en una matriz
- 21. Creando una cadena de conexión desde la entrada de un usuario en una aplicación WPF
- 22. Decodificación de una secuencia de entrada
- 23. ¿Cómo se lee desde stdin en python desde una tubería que no tiene final
- 24. Java convirtiendo una imagen en una secuencia de entrada SIN crear un archivo
- 25. Google Apps Script: ¿Cómo creo un archivo en una carpeta?
- 26. Lee un número indefinido de líneas desde la entrada estándar
- 27. ¿Cómo creo un Hash MD5 de una cadena en Cocoa?
- 28. Creando una secuencia FILE * que da como resultado una cadena
- 29. Creando una URL seo amigable desde una cadena
- 30. Javascript lee html de url en la cadena
Gracias. Esa es la respuesta correcta a la pregunta, pero lo que en realidad terminé necesitando realmente fue un poco diferente. Vea la respuesta a continuación. – zippy
Podría agregar un ejemplo también, ya que el enlace que proporcionó tampoco tiene ninguno. –
Clojuredocs tiene un ejemplo: http://clojuredocs.org/clojure_core/clojure.core/with-in-str – sanityinc