Деструктуризация форм и Compojure?

Я подумал, что опубликую это, поскольку я заставил его работать на основе предположений без реального понимания того, что происходит, и я подумал, что было бы полезно, если бы кто-то объяснил это.

Я понимаю, как получить элемент карты: 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.

6
задан edoloughlin 3 November 2010 в 16:19
поделиться