Theory: defroutes is a Clojure macroλ︎
The Compojure function
defroutes is actually a Clojure macro. The
defroutes macro provides a simple syntax for defining routes and associating handler functions.
What is a macro?λ︎
Clojure has a programmatic macro system which allows the Clojure community to extend the language, rather than wait for the language designers. This macro approach also helps keep the language very compact, with a minimum of primitives.
We have already used several macros in our code. In our project.clj configuration we use the
defproject macro to make it easy to define our Clojure project. In our code we have used the
defn macro to define names (symbols) for functions.
Peeking under the coversλ︎
You can always look at what a macro is doing by using the
macroexpand-all functions. These functions show you what the code looks like after the macro-reader has processed the macro.
To expand a macro, require the
clojure.walk library in your namespace
Then wrap the macro you wish to explore with the
You can see that the
defroutes function expands to a
make-route function that creates the details of the route and associates it with a handler or response map.
routes function join multiple routes together.
For further examples, see http://learnxinyminutes.com/docs/clojure-macros/