If this could integrate with existing efforts put on validation libraries,
plus (optionnally) a way to customize the "rendering" of pre-condition
errors, this could be great :-)

Maybe just inverting things : if the precondition returns falsy, this could
mean that there is no violated precondition. If the precondition returns
truethy, this could be printed.

2011/7/11 Timothy Washington <twash...@gmail.com>

> 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
> twash...@gmail.com
> 416.843.9060
>
>
>
> On Sun, Jul 3, 2011 at 11:42 AM, Shantanu Kumar 
> <kumar.shant...@gmail.com>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 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 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 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

Reply via email to