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