最後の数日間、Clojure と ClojureScript のclojure.specをさらに掘り下げました。
今までは、spec を特定の形式のデータに依存するパブリック関数内: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