Clojure 我能';t弄清楚如何记录/infof LazySeq的字符串值

Clojure 我能';t弄清楚如何记录/infof LazySeq的字符串值,clojure,Clojure,当我试图记录它的价值时,LazySeq正在踢我的屁股 (require '[clojure.tools.logging :as log]) (def layer->multipart [{:name "layer-name" :content "veg"} {:name "layer-tag" :content "abs"}]) (def field->multipart [{:name "field-id" :content "12345"} {:name "field-versi

当我试图记录它的价值时,LazySeq正在踢我的屁股

(require '[clojure.tools.logging :as log])
(def layer->multipart [{:name "layer-name" :content "veg"} {:name "layer-tag" :content "abs"}])
(def field->multipart [{:name "field-id" :content "12345"} {:name "field-version" :content "v1"}])

(log/infof "concat is %s" (concat layer->multipart field->multipart))
; => 2016-02-16 16:31:11,707  level=INFO [nREPL-worker-38] user:288 - concat is clojure.lang.LazySeq@87177bed 
; WTF is clojure.lang.LazySeq@87177bed?
我检查了答案,它表明我所需要做的就是做所有的事,我所有的梦想都会实现。但是,唉……不

(log/infof "concat is %s" (doall (concat layer->multipart field->multipart)))
; => 2016-02-16 16:31:59,958  level=INFO [nREPL-worker-40] user:288 - concat is clojure.lang.LazySeq@87177bed
; still clojure.lang.LazySeq@87177bed is not what I wanted
我已经观察到(prstr(concat层->多部分字段->多部分))做了我想做的事情,但它没有任何意义;pr str的文档表示“pr to a string”,pr的文档表示“将对象打印到当前值为*out*”的输出流”。我不想让任何东西*out*,我只想返回字符串值,以便记录器可以使用它

(log/infof "concat is %s" (pr-str (concat layer->multipart field->multipart)))
; => 2016-02-16 16:42:02,927  level=INFO [nREPL-worker-1] user:288 - concat is ({:content "veg", :name "layer-name"} {:content "abs", :name "layer-tag"} {:content "12345", :name "field-id"} {:content "v1", :name "field-version"})
; this is what I wanted but I don't want anything going to *out*...or do I?
我必须做些什么才能获得pr-str变体的效果,而不必担心任何不经意间被转储到stdout的东西(我猜这就是“out”的含义)?我希望在日志记录中完全实现懒惰序列(它永远不会变得太大……它只会像concat的意外事件一样懒惰)


如何记录LazySeq的全部值?

问题是,在幕后,记录器正在对您的惰性序列调用
.toString
。试试这个:

user=> (.toString (concat layer->multipart field->multipart))
;; "clojure.lang.LazySeq@87177bed"`
您真正想要的是将序列的内容转换为字符串。例如:

(log/infof "concat is %s" (apply str (concat layer->multipart field->multipart)))
;; Feb 16, 2016 5:10:19 PM clojure.tools.logging$eval420$fn__424 invoke
;; INFO: concat is {:name "layer-name", :content "veg"}{:name "layer-tag",     :content "abs"}{:name "field-id", :content "12345"}{:name "field-version", :content "v1"}

顺便说一下,
prstr
也可以。正如它的名字所说,它打印到一个字符串,而不是
*out*
。你在用那根绳子。

Aha!(pr str使用字符串作为*out*,或者类似的东西。我误解了文档。pr str可能是我最好的选择。请原谅我的无知。我是新手。@amalloy我不是真的想打印它,我是想记录它。我不认为这是“Clojure打印惰性序列”的重复一天结束时,我想要的是pr str,我只是误解了文件。