Mi rendo conto che la prima regola di Macro Club è Non usare macro, quindi la seguente domanda è intesa più come esercizio di apprendimento di Clojure che altro (Mi rendo conto che questo non è necessariamente il migliore utilizzare di macro).Aiutami a scrivere una macro Clojure che aggiunge automaticamente i metadati a una definizione di funzione
Voglio scrivere una macro semplice che funge da wrapper attorno a una macro regolare (defn)
e termina aggiungendo alcuni metadati alla funzione definita. Così mi piacerebbe avere qualcosa di simile:
(defn-plus f [x] (inc x))
... espandere fuori a qualcosa di simile:
(defn #^{:special-metadata :fixed-value} f [x] (inc x))
In linea di principio questo non sembra così difficile per me, ma io Ho problemi a individuare le specifiche per ottenere il [args]
e altri moduli nella funzione definita da analizzare correttamente.
Come bonus, se possibile, vorrei che la macro fosse in grado di gestire tutte le diverse forme di defn (cioè, con o senza docstring, definizioni multiple di arità, ecc.). Ho visto alcune cose nel pacchetto clojure-contrib/def
che sembrava possibilmente utile, ma è stato difficile trovare codice di esempio che le usasse.
Buona introduzione ... oggetti di scena importanti per questo. – Kekoa
Perché non utilizzare le macro? Stai pensando al preprocessore C? – Svante