Whilst you solved your problem, you didn't get an answer about metadata.
There are multiple places metadata can appear in a function definition:
dev=> (defn ^{:one true} func (^{:two true} [x] {:three true} x) {:four
true})
#'dev/func
dev=> (meta #'func)
{:one true, :arglists ([x]), :four true, :line 1, :column 1, :file
"/home/seanc/.clojure/dev.clj", :name func, :ns
#object[clojure.lang.Namespace 0x17b6ad97 "dev"]}
dev=> (->> #'func (meta) :arglists (mapv meta))
[{:two true, :three true}]
dev=>
I've delineated the arity of the function with ( ) for clarity so you can
which metadata belongs to the function Var and which belongs to a specific
arity, and you can see they are combined.
I've never seen anything except :pre/:post in position three and I've never
seen :pre/:post in position two (until I saw your example from ostash.dev)
-- but as you can see they are equivalent (and they combine).
I don't think I've ever seen function Var metadata in position four.
On Thursday, February 3, 2022 at 10:56:59 AM UTC-8 Laws wrote:
>
> I see this old post by Fogus:
>
> http://blog.fogus.me/2009/12/21/clojures-pre-and-post/
>
> With this example:
>
> (defn constrained–fn [f x]
> {:pre [(pos? x)]
> :post [(= % (* 2 x))]}
> (f x))
>
> But I see this modern example:
>
> https://ostash.dev/posts/2021-07-01-pre-post-conditions/
>
> (defn func ^{:pre [(pos? x)] :post [(< % 100) (> % 1)]} [x] (+ 1 x))
>
> Where it is in the metadata.
>
> But here I still the old style:
>
> https://clojure.org/reference/special_forms
>
> (defn constrained-sqr [x] {:pre [(pos? x)] :post [(> % 16), (< % 225)]} (*
> x x))
>
> I was away from Clojure for a few years, so I think it I missed some of
> its evolution. Is one of these styles favored?
>
> I'm struggling with an issue where I cannot get the error to show up, even
> when I deliberately send in data that would cause the assertion to return
> false.
>
> My function started:
>
> (defn get-cisa-advisories
> [cisa-advisory-urls]
> {
> :pre [(set? cisa-advisory-urls)]
> :post [(vector? %)]
> }
> (println "get-cisa-advisories")
> (try
>
> When I called this with a vector, I got no error, but the app silently
> died. I'm confused about this. The call to this function is wrapped in a
> try/catch block, and that assertion must have thrown an error because that
> is where the app dies, yet I couldn't see the exception in my catch block.
>
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/clojure/3cc16f33-3f7b-49dd-96e8-b20fdb37e9cdn%40googlegroups.com.