Каков идиоматический способ захвата отпечатков в * out * из функции Clojure? - PullRequest
5 голосов
/ 03 декабря 2009

Например, функция prxml выводит XML в * out *. Я хотел бы вместо этого захватить этот вывод в виде строки. Вот типичное использование из REPL:

user> (prxml [:p "Test"])
<p>Test</p>nil

Я бы вместо этого хотел:

(def xml (capture-out (prxml [:p "Test"])))

Я составил функцию захвата , но подозреваю, что что-то вроде этого существует, только у меня возникают проблемы с поиском в API или в списке рассылки.

Ответы [ 2 ]

6 голосов
/ 04 декабря 2009

В целом, если вы посмотрите на источник для with-out-str, вы увидите, как динамически привязать *out* к любому потоку, используя binding. Это работает для динамической установки значения любой существующей переменной.

6 голосов
/ 03 декабря 2009

Я только что обнаружил with-out-str из этого отличного сообщения в блоге , подробно описывающего обработку XML в Clojure.

Итак, правильная реализация моего примера:

(def xml (with-out-str (prxml [:p "Test"])))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...