Я использовал последние дни, чтобы углубиться в 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
.