Я подумал, что опубликую это, поскольку я заставил его работать на основе предположений без реального понимания того, что происходит, и я подумал, что было бы полезно, если бы кто-то объяснил это.
Я понимаю, как получить элемент карты: 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"}
do: (
Я также хотел получить доступ к части запроса : remote-addr
, а также к some_arg
. И в итоге я получил
(GET "/something" {{some_arg "some_arg"} :params ip :remote-addr}
(do-something-with some_arg ip))
. Я понимаю, что строки без кавычек some_arg
и ip
- это имена переменных, к которым я хочу привязать значения, но приведенная выше карта не является действительной картой Clojure. Как это работает?
Я также понимаю, что это оценивается по карте запроса Ring (которая каким-то образом предоставляется макросом defroutes
), но приведенное выше выражение не является определением функции или макроса, так как может ли он «существовать» как допустимое выражение в моем коде? Есть ли какая-то приостановка обычных правил для аргументов макросов? Мне не удалось найти определение синтаксиса деструктурирующих форм, понятное для этого не-Lisp'er.