Je pensais que je posterais cela comme je l'ai eu à travailler par devinettes sans une réelle compréhension de ce qui se passe et je pensais que cela pourrait être utile si quelqu'un l'a expliqué.Formes destructrices et Compojure?
Je comprends comment obtenir à un élément du: params carte dans un gestionnaire Compojure:
(GET "/something" [some_arg] "this is the response body")
ou
(GET "/something" {{some_arg "some_arg"} :params} "this is the response body")
bien que je ne comprends pas tout à fait ce que la partie {some_arg "some_arg"}
fait :(
Je voulais également accéder à la partie :remote-addr
de la demande, ainsi que some_arg
et je me suis retrouvé avec
(GET "/something" {{some_arg "some_arg"} :params ip :remote-addr}
(do-something-with some_arg ip))
Alors, je reçois que les chaînes et non cotées some_arg
ip
sont les noms des variables auxquelles je veux les valeurs liées, mais la carte ci-dessus n'est pas une carte Clojure valide. Comment ça marche? J'obtiens aussi que ceci est évalué par rapport à la carte de demande de Ring (qui est fournie par la macro defroutes
) mais l'expression ci-dessus n'est pas une fonction ou une définition de macro, donc comment peut-elle 'exister' comme une expression valide dans mon code? Y at-il une sorte de suspension des règles normales pour les arguments macro? J'ai été incapable de trouver une définition de la syntaxe des formes destructrices compréhensibles pour ce non-Lisp'er.
J'ai raté le fait que GET est une macro. Expliqué dans la réponse ci-dessous ... – edoloughlin