5

次のようなリストが与えられた場合:

(quote (do (println "Hello") (println "Goodbye")))

: これを適切にフォーマットされた文字列に変換して、次のような出力を得るにはどうすればよいですか:

(do
  (println "Hello") 
  (println "Goodbye")
)
4

2 に答える 2

8

clojure.pprint/writeで使用clojure.pprint/code-dispatch:

(clojure.pprint/write '(do (println "Hello") (println "Goodbye"))
                      :dispatch clojure.pprint/code-dispatch)

その少量のコードでは、改行は得られません。しかし、このような呼び出し

(clojure.pprint/write '(do (println "Hello") (println "Goodbye") (println "Hey, you left me out!"))
                      :dispatch clojure.pprint/code-dispatch)

戻り値

=> (do
     (println "Hello")
     (println "Goodbye")
     (println "Hey, you left me out!"))

それを文字列としてキャッチするには、呼び出しをラップします(with-out-str ...)

于 2013-08-04T14:28:20.003 に答える
5

よりもはるかにパフォーマンスの高い代替手段として、clojure.pprintBrandon Bloom のfippを試してみてください。

;; add [fipp "0.4.0"] to :dependencies
(require '[fipp.edn :as fipp])

(fipp/pprint '(do (println :foo) (println :bar) (println :quux))
             {:width 30}) ; force wrapping despite small size of data
;; printed output:
(do
 (println :foo)
 (println :bar)
 (println :quux))

残念ながら、Fipp はまだコード ディスパッチをサポートしていません。

于 2013-08-04T23:03:14.087 に答える