Я думал, что отправлю это, потому что заставил его работать на догадках без реального понимания того, что происходит, и я подумал, что было бы полезно, если бы кто-то объяснил это.
Я понимаю, какполучить элемент карты: params в обработчике Compojure:
(GET "/something" [some_arg] "this is the response body")
или
(GET "/something" {{some_arg "some_arg"} :params} "this is the response body")
, хотя я не совсем понимаю, что делает часть {some_arg "some_arg"}
:(
Я также хотел получить доступ к части :remote-addr
запроса, а также some_arg
. И в итоге я получил
(GET "/something" {{some_arg "some_arg"} :params ip :remote-addr}
(do-something-with some_arg ip))
Итак, я получаю, что строки без кавычек some_arg
и ip
- это имена переменных, к которым я хочу привязать значения, но карта выше не является действительной картой Clojure. Как она работает?
Я также понимаю, что это оценивается по кольцукарта запроса (которая каким-то образом предоставляется макросом defroutes
), но приведенное выше выражение не является определением функции или макроса, поэтому как оно может «существовать» как допустимое выражение в моем коде? Есть ли какая-то приостановка нормальногоправила для макро аргументов?Мне не удалось найти определение синтаксиса форм деструктуризации, понятное этому не-Лисперу.