Захват «оригинального» возвращаемого значения из with-out-str - PullRequest
7 голосов
/ 22 августа 2011

Я использую with-out-str для захвата некоторых данных, которые печатаются на стандартный вывод.Проблема в том, что with-out-str, кажется, отбрасывает возвращаемое значение из моей функции.Есть ли способ, которым я могу захватить оба?Я хотел бы иметь свой торт и есть его тоже.

Пример:

(with-out-str (do (prn "test") (+ 1 1)))

1 Ответ

9 голосов
/ 22 августа 2011

Определяя определение макроса 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#)))))

Без функции values из CommonLisp и его несколько функций возвращают значения , здесь мы вместо этого возвращаем вектор;первый элемент - это текст, полученный из стандартного вывода , а второй элемент - значение, возвращаемое при оценке формы тела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...