Hi,
It's by design, as the doc of s/keys states:
In addition, the values of *all* namespace-qualified keys will be validated
(and possibly destructured) by any registered specs. Note: there is
no support for inline value specification, by design.
So if the ns'ed key in your map is registered as a spec it will be validated.
In theory you could just validate with (s/keys) in your case, specifying keys
in req is useful to check presence and gen and in the case of opt just for gen.
The docstring is terse but dense in meaning/information.
On Wednesday, June 28, 2017 at 11:04:34 AM UTC+2, Mamun wrote:
>
> Hi All,
>
> Clojure spec keys is considering all key within namespace although it is
> not defined.
>
> Here is an example
>
> (s/def :person/fname string?)
> (s/def :person/lname string?)
> (s/def :person/id int?)
>
> ;;With only fname and lname
> (s/def :app/person (s/keys :req [:person/fname :person/lname]))
>
> ;;Success
> (s/explain-str :app/person
> {:person/lname "Abdullah"
> :person/fname "Mamun"} )
>
> ;;Success
> (s/explain-str :app/person
> {:person/lname "Abdullah"
> :person/fname "Mamun"
> :id "123"} )
>
> ;;fail with namespace id
> (s/explain-str :app/person
> {:person/lname "Abdullah"
> :person/fname "Mamun"
> :person/id "1234"})
>
>
> Is it bug or am I doing something wrong here?
>
> Br,
> Mamun
>
--
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].
For more options, visit https://groups.google.com/d/optout.