Je réalise que la première règle de Macro Club est Ne pas utiliser de macros, donc la question suivante est plus un exercice d'apprentissage de Clojure qu'autre chose (Je me rends compte que ce n'est pas nécessairement le meilleur utiliser de macros).Aidez-moi à écrire une macro Clojure qui ajoute automatiquement des métadonnées à une définition de fonction
Je veux écrire une macro simple qui agit comme une enveloppe autour d'une macro (defn)
régulière et finit par ajouter quelques métadonnées à la fonction définie. Je voudrais donc avoir quelque chose comme ceci:
(defn-plus f [x] (inc x))
... étendre vers quelque chose comme ceci:
(defn #^{:special-metadata :fixed-value} f [x] (inc x))
En principe, cela ne semble pas difficile pour moi, mais je J'ai du mal à clouer les détails pour obtenir le [args]
et d'autres formes dans la fonction définie à analyser correctement. En prime, si possible, j'aimerais que la macro puisse gérer toutes les formes disparates de defn (ie, avec ou sans docstrings, définitions d'arité multiples, etc.). J'ai vu certaines choses dans le paquet clojure-contrib/def
qui semblaient être utiles, mais il était difficile de trouver un exemple de code qui les utilisait.
Bonne intro ... les principaux accessoires pour cela. – Kekoa
Pourquoi ne pas utiliser des macros? Pensez-vous au préprocesseur C? – Svante