Clojure sprintf?

qre*_*est 11 printf clojure

有printf.它直接打印到stdout.

sprintf怎么样,格式与printf相同,但返回一个没有副作用的字符串?

Mic*_*zyk 15

在Clojure中,它被称为格式并且驻留在clojure.core:printf相当于(comp print format).


Bri*_*per 9

你应该cl-formatclojure.pprintlib中查看.它是Common Lisp的FORMAT函数的一个端口.它可以做Java printf不能做的事情,比如条件,迭代seqs等.

要回答你的问题,cl-format第一个参数nil将返回一个字符串; true将打印到STDOUT 的第一个参数.

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

请注意,如果format在Clojure中不存在,您还可以捕获Clojure的输出,printf如下所示:

user> (with-out-str (printf "%s" :foo))
":foo"
Run Code Online (Sandbox Code Playgroud)

with-out-str当库仅提供打印到STDOUT的函数并且您想要捕获输出时,它很有用.我遇到过这样做的Java库.


ben*_*din 5

考虑使用with-out-str宏:

(with-out-str
    (print x))
Run Code Online (Sandbox Code Playgroud)

或者只是调用java.lang.String的格式方法:

(String/format "%d" 3)
Run Code Online (Sandbox Code Playgroud)