user=> (contains? "abc" 1.5)
true
looks like for that, it's coerced to int
else if(key instanceof Number && (coll instanceof String ||
coll.getClass().isArray())) {
int n = ((Number) key).intValue();
return n >= 0 && n < count(coll);
}
=> (int 1.4)
1
=> (int 1.6)
1
=> (.intValue 1.4)
1
=> (.intValue 1.6)
1
On Fri, Mar 1, 2013 at 9:05 PM, Michael Gardner <[email protected]> wrote:
> On Mar 1, 2013, at 13:36 , AtKaaZ <[email protected]> wrote:
>
> > I don't think I understand what you mean (could you rephrase/example?),
> I cannot think of a case when I wouldn't want it to throw when I'm passing
> a non-number (contains? [:a :b :c] :a), I mean, rather than just silently
> ignoring.
>
> I'm talking about a case where you have one or more associative containers
> of unknown types, and you want to be able to generically ask them whether
> they contain a particular key. E.g.:
>
> (defn has-foo? [c] ;; c is only known to be Associative
> (contains? c :foo))
>
> Insofar as a vector can be viewed as a kind of associative container, one
> might expect/desire this code to just return false if c happens to be a
> vector. One could see this as a question about the contract promised by the
> Associative interface: is is always OK to ask an Associative container
> whether it contains a given key, or are implementations free to accept only
> certain kinds of keys? I could go either way on that personally, but I
> can't find any docs that support one interpretation or the other.
>
> > It;s not unlike this:
> > => (contains? '(:a :b :c) :a)
> > IllegalArgumentException contains? not supported on type:
> clojure.lang.PersistentList clojure.lang.RT.contains (RT.java:724)
> >
> > it throws because, it's similarly better than just ignoring it and
> propagating the bug somewhere else.
>
> Different case, because lists aren't Associative.
>
> > In a way, it's already so for String:
> > => (contains? "aaa" 1)
> > true
> > => (contains? "aaa" 3)
> > false
> > => (contains? "aaa" "a")
> > IllegalArgumentException contains? not supported on type:
> java.lang.String clojure.lang.RT.contains (RT.java:724)
> > => (contains? "aaa" 'a)
> > IllegalArgumentException contains? not supported on type:
> java.lang.String clojure.lang.RT.contains (RT.java:724)
>
> This one's actually quite surprising to me. I don't know why 'contains?
> throws when given a String and a non-numeric argument, since that's
> inconsistent with its behavior on vectors (and the exception's description
> seems inaccurate, since 'contains? *is* supported on Strings). Even more
> strangely:
>
> user=> (contains? "abc" 1.5)
> true
>
> I have no explanation for this.
>
> --
> --
> 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/groups/opt_out.
>
>
>
--
Please correct me if I'm wrong or incomplete,
even if you think I'll subconsciously hate it.
--
--
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/groups/opt_out.