简体   繁体   English

Clojure读取延迟序列({})的内容

[英]Clojure read the content of a lazy-seq ({ })

I'm new in Clojure. 我是Clojure的新手。 I have this problems: 我有这个问题:

I receive this data from a function: 我从一个函数收到此数据:

({:lat 40.4167754, :lng -3.7037902, :address Madrid, Spain})  

When I ask for the class, I get: 当我上课时,我得到:

> class x
> clojure.lang.LazySeq

I need access to :lat, :lng, :address , but I don't know how. 我需要访问:lat,:lng,:address ,但是我不知道如何。

Try this: 尝试这个:

(defn mystery-fn []
  (list {:lat 40.4167754, :lng -3.7037902, :address "Madrid, Spain"} )
)

(println :println (mystery-fn))
(prn     :prn     (mystery-fn))

(def a (first (mystery-fn)))
(prn :a a)

(def b (:lat a))
(prn :b b)

with output: 输出:

:reloading (tst.clj.core)
:println ({:lat 40.4167754, :lng -3.7037902, :address Madrid, Spain})
:prn ({:lat 40.4167754, :lng -3.7037902, :address "Madrid, Spain"})
:a {:lat 40.4167754, :lng -3.7037902, :address "Madrid, Spain"}
:b 40.4167754

Notice the difference between println and prn . 注意printlnprn之间的区别。 Using prn , you get strings displayed with double-quotes which can help a lot when there are embedded spaces. 使用prn ,您会得到显示带有双引号的字符串,这在嵌入空格时会很有帮助。

Also, when you want to label a printed output, it is often easier to use a keyword as the label like (prn :xyz ...) instead of (println "xyz = " ...) . 另外,当您要标记打印输出时,通常更容易使用关键字(prn :xyz ...)代替(println "xyz = " ...)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM