In precedenza avevo un'API che aveva un numero di funzioni al suo interno, ognuna delle quali prevedeva una mappa in un formato molto particolare. Quando ho iniziato a documentare questa API, ho trovato che nelle docstring di ognuna di queste funzioni stavo ripetendo "La mappa con cui viene chiamata questa funzione deve essere di tale e tale formato, e questo campo della mappa significa tale e così ".Documentazione di record in clojure
Quindi ho pensato che sarebbe stato meglio per quelle funzioni registrare un record e che avrei potuto semplicemente documentare il record. Tuttavia non sembra possibile documentare i record, almeno in alcun modo interpretati dalla macro doc
o Marginalia.
Una soluzione suggerita here è "basta aggiungere una: chiave doc nella meta del record".
Ho provato (defrecord ^{:doc "Here is some documentation"} MyRecord [field1 field2])
ma la macroespansione suggerisce che non ha alcun effetto. Anche defrecord
restituisce un'istanza di java.lang.class
che non implementa IMeta quindi non sono sicuro che possiamo fornirle i metadati?
- Come devono essere documentati i record?
- I record sono una soluzione appropriata qui?
Se leggi più in basso in quel thread, vedrai che l'aggiunta di un: doc key ai metadati del record non funzionerà. Si noti che è possibile aggiungere una stringa doc a un protocollo. – user100464
ma [questo] (http: // StackOverflow.com/questions/6627020/combining-clojure-defprotocol-and-defrecord) La risposta di overflow dello stack raccomanda di non scrivere protocolli che vengono implementati solo da un record, il che probabilmente è ciò che accadrebbe. –
Una soluzione è una libreria come ['prismatic/schema'] (https://github.com/Prismatic/schema), che consente di specificare il tipo di dati che accetterete, consentendo anche la verifica degli argomenti forniti. – noisesmith