Macros en ClojureScript
Muy útiles pero más farragosas de usar que en Clojure.
Principales diferencias pueden verse en la web del proyecto.
Fundamental:
No pueden definirse en cljs Han de definirse se cljc. También pueden en clj, pero preferible el primero por mi experiencia para trabajar luego con CIDER. No pueden probarse en el mismo archivo donde se han definido, por la necesidad de necesitar primero compilación en JVM y luego ejecución en el runtime de javascript. Igual en el REPL, no podemos cargar el ns donde se definen y probarlas. Hemos de hacer un require desde un cljs, y cargando este ns secundario, ejecutar las macros en el REPL desde él. No pueden contener código que vaya a ejecutarse de javascript, para poder compilarse en la JVM. Podemos usar tanto macroexpand-1 como macroexpand, pero clojure.walk/macroexpand-all no está disponible.