2016-10-21 3 views
0

Je suis nouveau dans Clojure. Je ces problèmes:Clojure lire le contenu d'un lazy-seq ({})

Je reçois ces données d'une fonction:

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

Quand je demande à la classe, je reçois:

> class x 
> clojure.lang.LazySeq 

je besoin d'avoir accès à : latitude,: lng,: adresse, mais je ne sais pas comment.

+2

La séquence doit-elle toujours contenir une seule valeur? Vous pouvez utiliser '(first x)' pour obtenir la première carte. – Lee

+0

Vos données ne sont pas valides. Je m'attendrais '({: lat 40.4167754,: lng -3.7037902,: adresse" Madrid, Espagne "})', avec un préliminaire '' 'si vous comptez le lire. – Thumbnail

+0

Merci @Lee c'est la clé pour résoudre mon problème. – matiasmasca

Répondre

1

Essayez ceci:

(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) 

avec sortie:

: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 

Notez la différence entre println et prn. En utilisant prn, vous obtenez des chaînes avec des guillemets qui peuvent aider beaucoup quand il y a des espaces intégrés.

En outre, lorsque vous souhaitez étiqueter une sortie imprimée, il est souvent plus facile d'utiliser un mot-clé comme l'étiquette (prn :xyz ...) au lieu de (println "xyz = " ...).

+0

Merci Alan, ça marche. – matiasmasca