"Gerçek" giriş akışı yerine bir dize okuma akışı için *in*
bağlamak istiyorum. Bunu nasıl yaparım?Bir dosya veya url yerine bir dize okur bir giriş akışı oluşturmak nasıl
10
A
cevap
14
Kontrol dışarı with-in-str
:
;; 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
İşte ben bunu kadar sona erdi için örnek kod var:
http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/with-in-str
ClojureDocs onun kullanımıyla ilgili bir örnek vardır. Fikir, giriş ve çıkış akışını alan basit bir sunucu okuma/yazdırma döngü işlevidir. Sorunum, böyle bir işlev için test akışlarının nasıl oluşturulacağıydı ve bir dize işlevinin yapılacağını düşündüm. Bunun yerine ihtiyacım olan şey buydu:
(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")
İlgili konular
- 1. Bir http giriş akışı nasıl okunur?
- 2. Sabit bellekten bir giriş akışı oluşturma
- 3. SharpSSH'den bir dosya akışı
- 4. Bir dize bir URL alın
- 5. Bir HttpServletResponse'ye bir giriş akışı yazın
- 6. C++ dosya akışı işlevini bir stringstream
- 7. Bir dosya applicationhost.config oluşturmak nasıl
- 8. Julia, bir dosya yerine bir akıştan okunabilir
- 9. express.js: bir dosya olarak akışı nasıl indirebilirim?
- 10. LZO bir dosya akışı ile çalışmak nasıl?
- 11. Dize Akışı C
- 12. Python komut satırı 'dosya giriş akışı'
- 13. ASP.NET MVC 2'de, bir giriş etiketi yerine bir textarea oluşturmak için Html.TextBoxFor nasıl alabilirim?
- 14. Backbone.js & Handlebars.js ilgili bir URL oluşturmak için
- 15. Tarayıcı aracılığıyla github'da bir yerde bir dosya oluşturmak mümkün mü?
- 16. Dize akışı nasıl temizlenir?
- 17. Sorun: Bir dize (<!MSG>) okunana kadar Java-Read yuvası (Bluetooth) giriş akışı
- 18. Boost.PropertyTree, bir dosya değil, bir dize ile nasıl beslenir?
- 19. URL belirli bir dize içeriyorsa htaccess yönlendirmesi
- 20. kolay yolu bir dize bir URL Verilen .NET
- 21. Laravel 5.2: Bir dize yerine bir nesneyi geçirerek Blade'i genişletme
- 22. C: 'den bir url protokolünü: - Dosya:
- 23. PHP gethostbyname() ad, bir dize değişkeni yerine bir değişken olarak geçirildiğinde IP yerine Ad döndürüyor
- 24. Haxe - bir dize adından bir sınıfın örneğini oluşturmak
- 25. nasıl bir dize olarak bir dosya adı yolunda dahil olmak üzere bir metin dosyasına işaret var bellek akışı
- 26. Yeni bir satır oluşturmak yerine dizeleri aynı satıra nasıl eklenir? Bir dosyaya
- 27. Bir bağlantı yerine bir görüntü gönderin
- 28. Neden char * yazdırmak bir adres yerine bir dize verir?
- 29. Giriş akışından ses giriş akışı alınamadı
- 30. ASP.NET MVC - Bir eylem bağlantısı yerine nasıl URL alınır?
Teşekkürler. Sorunun doğru cevabı bu, ama gerçekten ihtiyacım olan şey biraz farklıydı. Aşağıdaki cevaba bakınız. – zippy
Sağladığınız bağlantıda bir tane bulunmadığından da bir örnek ekleyebilirsiniz. –
Clojuredocs'ın bir örneği var: http://clojuredocs.org/clojure_core/clojure.core/with-in-str – sanityinc