この関数では:
(defn my-post
[a]
{:post (number? %)}
a)
事後条件は実行されません (少なくとも、アサーション エラーは発生しません)。私は今、それがそうあるべきだったことを知っています:
(defn my-post
[a]
{:post [(number? %)]} ;; note the square brackets around the expression
a)
実際、これは正しく機能します。
問題は、これが黙って失敗したことであり、何が問題なのかを理解するのにしばらく時間がかかりました. 構文エラー、実行時例外はありません。
Clojure が文句を言わなかった理由を理解するために、Clojure がこのコードで何をするのかを理解したいと思います。 マクロ展開?破壊?角括弧が表示されない場合、コードは消えますか?