2009-12-03 2 views
5

예를 들어, prxml 함수는 XML을 * out *으로 인쇄합니다. 대신이 출력을 String으로 캡처하고 싶습니다.Clojure 함수에서 출력을 * out *으로 캡처하는 관용적 인 방법은 무엇입니까?

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

내가 대신 할 싶습니다 : 여기 REPL에서 일반적인 사용입니다

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

내가 캡처 아웃 기능을 만들었지 만이 존재처럼 뭔가 의심이, 나는 API 또는 메일 링리스트에서 찾는데 어려움이 있습니다.

답변

6

나는 with-out-str을 발견했습니다.이 great blog post에서 Clojure의 XML 처리가 자세히 설명되었습니다.

그래서 내 예제의 올바른 구현은 다음과 같습니다

(def xml (with-out-str (prxml [:p "Test"]))) 
6

더 일반적으로, 당신은 with-out-str의 소스를 보면 동적 binding를 사용하는 스트림에 *out*을 바인딩하는 방법을 볼 수 있습니다. 이것은 기존 var의 값을 동적으로 설정하는 데 사용됩니다.