2010-08-28 15 views
11

Baskı var. Doğrudan stdout'a yazdırır.Clojure sprintf?

Sprintf hakkında, printf ile aynı şekilde formatlar ancak yan etki olmadan bir dize döndürür?

o format denilen ve clojure.core bulunur oluyor Clojure ise

cevap

15

: printf(comp print format) eşdeğerdir.

9

clojure.pprint lib adresindeki cl-format ürününü incelemelisiniz. Common Lisp'in FORMAT işlevinin bir bağlantı noktası. Bu cl-format ile, vb seqs yineleme,

sorunuzu cevaplamak için Java en printf Koşullamalar gibi yapamaz şeyler yapabilir, nil birinci argüman bir dize döndürür; true'un ilk argümanı STDOUT'a yazdırılacaktır. Bir kütüphane sadece bu baskılar bir işlev sağlar zaman

user> (with-out-str (printf "%s" :foo)) 
":foo" 

with-out-str faydalıdır: format zaten Clojure içinde olmasaydı, ayrıca böyle Clojure en printf çıkış yakalayabilir ki

user> (cl-format nil "~{~R~^, ~}" [1 2 3 4]) 
"one, two, three, four" 

Not STDOUT ve bunun yerine çıktı yakalamak istersiniz. Bunu yapan Java kitaplıklarında çalışıyorum.

+0

bu java libs Clojure en yazma olmaz \ * dışarı \ *, yapacaklar mı? System/setOut'u var kullanan bir PrintWriter ile ele geçirmeniz gerekir. – gtrak

5

ile aşımı-str makro kullanarak düşünün:

(with-out-str 
    (print x)) 

Ya da sadece java.lang.String biçiminin yöntemini çağırın:

(String/format "%d" 3)