In clojure sto usando: pre come questoMessaggi più leggibili con: pre e: post?
user=> (defn cannot-take-empty [x] {:pre [((complement empty?) x)]} 1)
#'user/cannot-take-empty
user=> (cannot-take-empty #{})
AssertionError Assert failed: ((complement empty?) x) user/cannot-take-empty (NO_SOURCE_FILE:186)
che è grande, ma non spiega il motivo per cui affari che non ha senso passare in un insieme vuoto. (O una collezione con più di cinque elementi, o una collezione che ha due chiavi presenti ma non un'altra, o qualunque sia la regola del giorno.) Questo è potenzialmente ancora più confuso per l'utente se la precondizione utilizza una funzione privata.
C'è un modo per fornire un feedback più utile all'utente come un messaggio di errore, quando si utilizza: pre e: post?
dai un'occhiata a [questa risposta] (http://stackoverflow.com/a/24874961/642340) È un po 'brutto ma dovrebbe funzionare. – soulcheck
@soulcheck Speravo di evitare di lanciare eccezioni in modo esplicito, sembra piuttosto java-esque. –
si può sempre racchiuderlo in una funzione/macro '(defn wrapper [c text] (if (not c) (throw (AssertionError. Text))))' ma sì, non bello. – soulcheck