Zdaję sobie sprawę, że pierwszą zasadą Macro Club jest Nie używaj makr, więc poniższe pytanie jest przeznaczone raczej do nauki Clojure niż cokolwiek innego (Rozumiem, że niekoniecznie najlepsze jest użycie makr).Pomóż mi napisać makro Clojure, które automatycznie dodaje metadane do definicji funkcji
Chcę napisać proste makro, które działa jak opakowanie wokół zwykłego makro (defn)
i kończy dodawanie niektórych metadanych do zdefiniowanej funkcji. Więc chciałbym mieć coś takiego:
(defn-plus f [x] (inc x))
... rozwinąć się coś takiego:
(defn #^{:special-metadata :fixed-value} f [x] (inc x))
W zasadzie to nie wydaje mi się, że trudno, ale jestem Mam problem ze zbieraniem szczegółów pobierania i innych formularzy w zdefiniowanej funkcji, które mają być poprawnie przeanalizowane.
Jako bonus, jeśli to możliwe, chciałbym, aby makro mogło obsłużyć wszystkie rozbieżne formy defn (tj. Z lub bez docstrukcji, wielu definicji arii, itp.). Widziałem pewne rzeczy w pakiecie clojure-contrib/def
, które wyglądały na pomocne, ale trudno było znaleźć przykładowy kod, który z nich korzystał.
Dobre intro ... główne rekwizyty do tego. – Kekoa
Dlaczego nie używać makr? Czy myślisz o preprocesorze C? – Svante