defroutes
- это макрос , поэтому, к сожалению, вы не сможете передать его такой функции, как map.Вам нужно написать макрос, который расширится до вызова defroutes.или посмотрите на функции, в которые он расширяется, и вызовите их напрямую.
Не будет работать создание списка маршрутов в вызове к defroutes, подобного этому
(defroutes public-routes
(make-list-of-routes)
развернется в список маршрутов:
(defroutes public-routes
( (GET "/" [] (info/index-template))
(GET "/about" [] (info/about-template))
(GET "/contact" [] (info/contact-template))) )
если defroutes
где нормальная функция, вы решите это с помощью apply
(apply defroutes (conj 'public-routes (make-list-of-routes)))
, поскольку defroutes
- это макрос, который полностью завершен до того, как может быть применено применение, и результаты не будут иметь большого смысла.Вы действительно не можете создавать макросы как функции.макросы не являются первоклассными гражданами в скрытой форме (или в каком-то другом известном мне слове). Когда некоторые клоюрцы (обычно не я) говорят: «Макросы злые», они часто думают о таких ситуациях, когда вы сталкиваетесь с тем, чточто-то - это макрос, когда вы пытаетесь его скомпоновать и не можете.
решение состоит в том, чтобы не использовать макрос defroutes и напрямую вызывать функцию маршрутов.