我怎样才能在Clojure中将PersistentHashMap打印成字符串?

Zub*_*air 29 clojure

我怎样才能在Clojure中将PersistentHashMap打印成字符串?我正在寻找类似的东西:

(str (pprint {... hash map here...})
Run Code Online (Sandbox Code Playgroud)

我可以作为一个字符串传递

Sha*_*mar 43

(let [s (java.io.StringWriter.)]
  (binding [*out* s]
    (clojure.pprint/pprint {:a 10 :b 20}))
  (.toString s))
Run Code Online (Sandbox Code Playgroud)

编辑:等效简洁版:

(with-out-str (clojure.pprint/pprint {:a 10 :b 20}))
Run Code Online (Sandbox Code Playgroud)

  • 你也可以使用with-out-str,它会删除所有绑定内容. (6认同)

小智 18

这应该有所帮助:

(clojure.pprint/write {:a 1 :b 2} :stream nil)
Run Code Online (Sandbox Code Playgroud)

根据clojure.pprint/write documentation

在以下情况下返回字符串结果:stream为nil,否则为nil.


Abh*_*kar 15

user=> (import java.io.StringWriter)
java.io.StringWriter
user=> (use '[clojure.pprint :only (pprint)])
nil
user=> (defn hashmap-to-string [m] 
  (let [w (StringWriter.)] (pprint m w)(.toString w)))
#'user/hashmap-to-string
user=> (hashmap-to-string {:a 1 :b 2})
"{:a 1, :b 2}\n"
Run Code Online (Sandbox Code Playgroud)


mty*_*aka 9

(pr-str {:a 1 :b 2}) ;; => "{:a 1, :b 2}"
Run Code Online (Sandbox Code Playgroud)

  • 是的,你是对的,我做错了.它现在有效,除了(pr-str {:a 1:b {:a 2:b 2}})返回{:a 1,:b {:a 2,:b 2}}.有没有什么方法可以让它返回它与回车? (2认同)