Poprzednio miałem api, które zawierało wiele funkcji, z których wszystkie oczekiwały mapy w bardzo szczególnym formacie. Kiedy dochodziłem do dokumentowania tego API, stwierdziłem, że w docstruktach każdej z tych funkcji powtarzałem "Mapa, z którą ta funkcja jest wywoływana, musi mieć taki i taki format, a to pole mapy oznacza takie i takie . "Dokumentacja rekordów w clojure
Więc pomyślałem, że lepiej byłoby, gdyby te funkcje pobrały płytę i żebym mógł zamiast tego udokumentować nagranie. Jednak nie wydaje się możliwe dokumentowanie rekordów, przynajmniej w jakikolwiek sposób interpretowane przez makro lub Marginalia.
Zaproponowane rozwiązanie here to "po prostu dodaj: klucz do dokumentu w meta rekordu".
Próbowałem (defrecord ^{:doc "Here is some documentation"} MyRecord [field1 field2])
, ale makroekspanding sugeruje, że nie ma żadnego efektu. Również defrecord
zwraca instancję java.lang.class
, która nie implementuje IMeta, więc nie jestem pewien, czy możemy podać jej metadane?
- Jak powinny być udokumentowane zapisy?
- Czy zapisy są tutaj odpowiednim rozwiązaniem?
Jeśli będziesz czytać dalej w tym wątku, zobaczysz, że dodanie klucza: doc do metadanych rekordu nie będzie działać. Zauważ, że możesz dodać ciąg dokumentu do protokołu. – user100464
, ale [to] (http: // stackoverflow.com/questions/6627020/combining-clojure-defprotocol-and-defrecord) odpowiedź przepełnienia stosu zalecana jest przeciwko pisaniu protokołów, które są implementowane tylko przez jeden rekord, co prawdopodobnie nastąpi. –
Jednym z rozwiązań jest biblioteka podobna do ['prismatic/schema'] (https://github.com/Prismatic/schema), która pozwala określić rodzaj akceptowanych danych, a także umożliwia weryfikację podanych argumentów. – noisesmith