我正在使用with-out-str来捕获打印到stdout的一些数据。问题是with-out-str似乎抛弃了我函数的返回值。有什么方法可以捕捉到它们吗?我想吃蛋糕也吃。
示例:
(with-out-str (do (prn "test") (+ 1 1)))
答案 0 :(得分:9)
Aping核心库的with-out-str
宏的定义,您可以定义类似这样的宏:
(defmacro with-out-str-and-value
[& body]
`(let [s# (new java.io.StringWriter)]
(binding [*out* s#]
(let [v# ~@body]
(vector (str s#)
v#)))))
没有the values
function from Common Lisp及其multiple function return values,这里我们返回一个向量;第一项是从标准输出收集的文本,第二项是通过评估正文形式返回的值。