Clojure get-nested-map-Wert
Ich bin also verwendet, um mit einem verschachtelten array oder anzeigen der Einstellungen für meine Anwendungen. Ich habe versucht, eine in Clojure wie diese:
(def gridSettings
{:width 50
:height 50
:ground {:variations 25}
:water {:variations 25}
})
Und ich fragte mich, ob Sie wissen, einen guten Weg um eine geschachtelte Wert? Ich habe versucht, schreiben
(:variations (:ground gridSettings))
Die funktioniert, aber es ist backwords und eher umständlich, vor allem, wenn ich ein paar Stufen.
- Beide mtaka und dbyrne Antworten sind gemeinsame Wege, um dieses Problem zu lösen. Je nachdem, was Euch einfällt! Ich würde beachten, dass get-in macht Ihre Absicht klarer.
- Wow alle guten Antworten:) Danke
- Ich denke, es ist Zeit zu akzeptieren, dass man diese Antworten. Mein Herz sagt dbyrne aber mein Kopf sagt mtyaka 🙂
- Schwer zu entscheiden eine Antwort, denn Sie sind alle richtig und nützlich, und ich denke, dass Menschen am besten gedient, durch Lesen Sie alle!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das ist, was
get-in
hat:Aus der docstring:
Können Sie die thread-first-Makros:
Ich lieber
->
überget-in
außer für zwei spezielle Fälle:(:ground gridSettings)
ist nil?nil
. Es wird keine exception geworfen.(:ground nil) ;=> nil
. Mit->
es sei denn, Sie bewusst etwas anderes brauchen Sie auch zu sein scheint, Clojure idiomatisch.->
können verwendet werdenor
auch schön die Rückkehr einer nicht-gefundenen Wert.(get-in grid-settings [:ground :variations] "not found!")
vs.(-> grid-settings :ground :variations (or "not found!"))
Abgesehen von den anderen Antworten erwähnt hat (
get-in
und->
makro), manchmal wollen Sie zum abrufen mehrerer Werte aus einer Karte (verschachtelt oder nicht) in denjenigen Fällen, in de-Strukturierung kann sehr hilfreich sein,Karten sind partielle Funktionen (wie in nicht Gesamt). Somit kann man Sie einfach wenden Sie Sie als Funktionen. Basierend auf der Karte von der Frage:
Das Ergebnis ist eine Karte. Also, es kann erneut angewendet werden, die Ergebnisse in einer sehr ähnlichen (aber nicht nach hinten) "syntax", wie vorgeschlagen, in der Frage: