2010-08-28 29 views
11

有printf。它直接打印到標準輸出。Clojure sprintf?

sprintf如何與printf格式相同,但返回的字符串沒有副作用?

回答

15

在Clojure中,它被稱爲format並位於clojure.coreprintf相當於(comp print format)

9

你應該檢查出cl-format,在clojure.pprint lib。它是Common Lisp的FORMAT函數的一個端口。它可以做的事情,Java的printf不能做,像條件語句,遍歷seqs等

要回答你的問題,與cl-formatnil第一個參數將返回一個字符串;第一個參數true將打印到STDOUT。

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

注意,如果format尚未Clojure中的存在,你還可以捕捉從Clojure的printf像這樣的輸出:

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

with-out-str是有益的,當一個庫只提供了一個功能,打印到STDOUT,而您想要捕獲輸出。我已經運行了這樣做的Java庫。

+0

這些Java庫不會寫Clojure的\ *總分\*, 他們會嗎?你需要用一個使用var的PrintWriter劫持System/setOut。 – gtrak 2013-08-02 23:31:56

5

考慮使用與出-STR宏:

(with-out-str 
    (print x)) 

或者只是叫java.lang.String中的格式的方法:

(String/format "%d" 3)