Я использовал последние дни, чтобы углубиться в clojure.spec в Clojure и ClojureScript.
До сих пор я нахожу это наиболее полезным, использовать спецификации в качестве охранников в :pre и :post в публичных функциях, которые полагаются на данные в определенном формате.
(defn person-name [person]
{:pre [(s/valid? ::person person)]
:post [(s/valid? string? %)]}
(str (::first-name person) " " (::last-name person)))
Проблема с этим подходом заключается в том, что я получаю java.lang.AssertionError: Assert failed: (s/valid? ::person person) без какой-либо информации о , что точно не соответствовало спецификации.
Есть ли у кого-нибудь идея как получить лучшее сообщение об ошибке в :pre или :post охранниках?
Я знаю о conform и explain*, но это не помогает тем сторонам :pre или :post.