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.