我正在使用with-out-str来捕获打印到stdout的一些数据.问题是with-out-str似乎抛弃了我函数的返回值.有什么方法可以捕捉到它们吗?我想吃蛋糕也吃.
例:
(with-out-str (do (prn "test") (+ 1 1)))
Run Code Online (Sandbox Code Playgroud)
如果定义了核心库的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#)))))
Run Code Online (Sandbox Code Playgroud)
如果没有Common Lisp 的values函数及其多函数返回值,这里我们返回一个向量; 第一项是从标准输出收集的文本,第二项是通过评估正文形式返回的值.