6
我正在使用with-out-str来捕获一些打印到stdout的数据。问题是,out-str似乎丢掉了我函数的返回值。有什么办法可以捕捉到两者?我想吃我的蛋糕,也吃。从with-out-str中捕获“原始”返回值
例子:
(with-out-str (do (prn "test") (+ 1 1)))
我正在使用with-out-str来捕获一些打印到stdout的数据。问题是,out-str似乎丢掉了我函数的返回值。有什么办法可以捕捉到两者?我想吃我的蛋糕,也吃。从with-out-str中捕获“原始”返回值
例子:
(with-out-str (do (prn "test") (+ 1 1)))
阿萍的定义核心库的with-out-str
宏,你可以定义一个类似这样的:
(defmacro with-out-str-and-value
[& body]
`(let [s# (new java.io.StringWriter)]
(binding [*out* s#]
(let [v# [email protected]]
(vector (str s#)
v#)))))
没有the values
function from Common Lisp及其multiple function return values,在这里,我们返回一个向量代替;第一项是从标准输出收集的文本,第二项是通过评估正文形式返回的值。
你指的是哪个返回值?从评估'(+ 1 1)'返回'2'? – seh