Ich dachte, ich würde dies posten, da ich es durch Vermutungen zum Laufen gebracht habe, ohne wirklich zu verstehen, was vor sich geht, und ich dachte, es könnte hilfreich sein, wenn jemand es erklärt.
Ich weiß, wie man an ein Element der :params-Map in einem Compojure-Handler gelangt:
(GET "/something" [some_arg] "this is the response body")
または
(GET "/something" {{some_arg "some_arg"} :params} "this is the response body")
obwohl ich nicht ganz verstehe, was die {some_arg "some_arg"}
Teil macht :(
Ich wollte auch auf die :remote-addr
Teil des Antrags sowie some_arg
. Und ich endete mit
(GET "/something" {{some_arg "some_arg"} :params ip :remote-addr}
(do-something-with some_arg ip))
Ich verstehe also, dass die nicht in Anführungszeichen gesetzten Zeichenfolgen some_arg
y ip
sind die Namen der Variablen, an die ich die Werte gebunden haben möchte, aber die obige Map ist keine gültige Clojure-Map. Wie funktioniert das?
Ich bekomme auch, dass dies gegen die Ring-Anfrage-Map ausgewertet wird (die irgendwie von der defroutes
Makro), aber der obige Ausdruck ist weder eine Funktions- noch eine Makrodefinition, wie kann er also als gültiger Ausdruck in meinem Code "existieren"? Gibt es eine Art Aussetzung der normalen Regeln für Makroargumente? Ich habe keine Definition der Syntax von Destrukturierungsformen finden können, die für einen Nicht-Lispianer verständlich ist.