Thanks Hubert, this is exactly what I'm talking about.  D. Werner's
recommendation to use a function call for the validation is a good
point, but having a human readable message like this would be the most
clear.

Cheers,
Jeff

On Feb 10, 9:23 pm, Hubert Iwaniuk <neo...@kungfoo.pl> wrote:
> Hi,
>
> Jeff correct me if I'm wrong but I think you are after something along the 
> following lines.
> Instead:
> (defn f [x] {:pre [(some-fancy-validation x)]} ..)
>
> To have something like this:
> (defn f [x] {:pre [^{:msg "here goes description of what has not been valid"} 
> (some-fancy-validation x)]} ..)
>
> It could turn precondition to a bit more user-friendly construct.
>
> I would also like to have assert-args public.
>
> Cheers,
> Hubert.
> On Feb 10, 2011, at 8:10 PM, Daniel Werner wrote:
>
>
>
>
>
>
>
> > On 10 February 2011 17:05, Jeff Rose <ros...@gmail.com> wrote:
> >> Sorry for the reply spam, but I've just remembered another error
> >> reporting issue: pre and post conditions.  They are a great feature
> >> and I'd like to use them more often, but the error messages they
> >> produce are virtually useless in comparison to just writing your own
> >> check with a custom exception.  How about having optional error
> >> messages for the conditions?
>
> > You can make your pre/post condition AssertionErrors more
> > human-readable by factoring out their logic into helper functions:
>
> > (defn valid-article-id? [art-id]
> >  (or (and (> (mod x 42) 3) (frobz x)) (qux x)))
>
> > (defn buy-article [art-id]
> >  {:pre [(valid-article-id? art-id)]}
> >  ...)
>
> > Thus, the AssertionError message will complain about
> > "valid-article-id?" failing instead of the rather cryptic "or and
> > mod". If you need even more flexibility, it is also possible to throw
> > an exception from the helper function. Not pretty, though.
>
> > That said, I'd really wish for the private clojure.core/assert-args
> > macro to be made public. It's very comfortable to work with and
> > provides for semi-standardized error messages (offending argument name
> > always in front).
>
> > --
> > 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