我怎样才能在clojure中打印一个引用列表?

Zub*_*air 5 clojure

给出如下列表:

(quote (do (println "Hello") (println "Goodbye")))
Run Code Online (Sandbox Code Playgroud)

:我怎么能把它变成一个格式很好的字符串,输出如下:

(do
  (println "Hello") 
  (println "Goodbye")
)
Run Code Online (Sandbox Code Playgroud)

Leo*_*hin 8

使用clojure.pprint/writeclojure.pprint/code-dispatch:

(clojure.pprint/write '(do (println "Hello") (println "Goodbye"))
                      :dispatch clojure.pprint/code-dispatch)
Run Code Online (Sandbox Code Playgroud)

对于少量代码,您将无法获得新的代码.但是像这样的电话

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

返回

=> (do
     (println "Hello")
     (println "Goodbye")
     (println "Hey, you left me out!"))
Run Code Online (Sandbox Code Playgroud)

捕获它作为一个字符串包装调用 (with-out-str ...)


Mic*_*zyk 5

作为一个更加高效的替代方案clojure.pprint,你可能想尝试Brandon 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))
Run Code Online (Sandbox Code Playgroud)

不幸的是,Fipp还不支持代码发送.