Truss <https://github.com/ptaoussanis/truss>also has good support for :pre 
and :post conditions 
<https://github.com/ptaoussanis/truss#assertions-within-prepost-conditions>

On Monday, July 11, 2011 at 7:40:48 PM UTC+2, frye wrote:
>
> Note: This message was originally posted by ' Shantanu' on the "*Re: 
> Clojure for large programs*" thread. 
>
> I took a look at  Shantanu's macros, and I like the concept a lot. But I 
> would prefer something baked into the :pre condition itself. The reason is 
> that it just removes a layer of indirection. If you dig into '
> *clj/clojure/core.clj*', you can see that the 'fn' macro is using 
> 'assert' to test these conditions. Assert allows error messages to be 
> applied, ie: 
>
> *user => (assert false) *
>
> *user => (assert false "fubar") *
>
>
>
> However, (defmacro fn ...) assumes that just the boolean condition is 
> being passed in, A). But I'd like to have the option to pass in a message 
> B). 
>
>
> *A) *
>
> *(def fubar *
>
> *  (fn []*
>
> *    {:pre [ (true? false) ] }*
>
> *    (println "Hello World")))*
>
> *(fubar)*
>
>
> *B) *
>
> *(def thing *
>
> *  (fn []*
>
> *    {:pre [ [(true? false) "A false message"] ] }*
>
> *    (println "Hello World")))*
>
> *(thing)*
>
>
>
> I reworked the 'fn' macro, only for the :pre condition, as a demonstration 
> (see here <http://pastebin.com/fETV1ejJ>). The calling semantics don't 
> change that much. Is there any interest in putting this into core? I'd 
> use Shantanu's workaround otherwise, or in the interim. 
>
> Thanks 
>
> Tim Washington 
> twas...@gmail.com <javascript:> 
> 416.843.9060 
>
>
>
> On Sun, Jul 3, 2011 at 11:42 AM, Shantanu Kumar <kumar.s...@gmail.com 
> <javascript:>> wrote:
>
>>
>>
>> On Jul 3, 7:39 pm, Timothy Washington <twash...@gmail.com> wrote:
>> > I'm using pre / post assertions quite a bit in a project I'm building. 
>> And I
>> > too would love to see better or custom error messages for each 
>> assertion.
>>
>> That should be possible with a macro. For example, I use this:
>>
>> https://bitbucket.org/kumarshantanu/clj-miscutil/src/acfb97c662d9/src/main/clj/org/bituf/clj_miscutil.clj#cl-1009
>>
>> Maybe you need something like this(?):
>>
>> (defmacro verify-my-arg
>>  "Like assert, except for the following differences:
>>  1. does not check for *assert* flag
>>  2. throws IllegalArgumentException"
>>  [err-msg arg]
>>  `(if ~arg true
>>     (throw (IllegalArgumentException. ~err-msg))))
>>
>> Then use it thus:
>>
>> (defn foo [m]
>>  {:pre [(verify-my-arg "m must be a map" (map? m))]}
>>  (println m))
>>
>> Regards,
>> Shantanu
>>
>> --
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clo...@googlegroups.com 
>> <javascript:>
>> Note that posts from new members are moderated - please be patient with 
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+u...@googlegroups.com <javascript:>
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>>
>
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to