the old contails? debate :)
contains? is only intented for associative collections. This explains
(somewhat) the behavior on vectors.
They are seen as assocuative collections from indexes to values.
I'm not exactly sure about this, but I expect
(contains? c x)  to be true if you can call (get c x). (and get a truthy
result except if the value is defined but nil)
To test if a sequential collection contains the value just call .contains
or use the (some #{x} c) idiom.

The name IS misleading but after you read the docs it should be clear so i
don't think the behaviour of contains? has to be changed.
Greetings


On Fri, Mar 1, 2013 at 8:36 PM, AtKaaZ <atk...@gmail.com> 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.
> 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.
>
> I don't know about others but, I would prefer if the constraints of a
> function's definition are violated by ie. devs calling it wrongly (maybe
> not even anticipating that it could be called wrongly due to it being like
> generic - perhaps in a manner that you've explained and I didn't quite
> understand) are enforced and exceptions thrown rather than silently
> ignoring therefore allowing subtle bugs.
>
> 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)
>
> Where it's almost as what I'd want for vector to be, namely: the valid
> keys numbers, are allowed, but when invalid keys are used ie. symbol or
> other strings, then exception is thrown; but not so for vectors; Granted
> that the exception thrown seems to be saying something other than: bad key
> type for passed collection (or so) but still...
>
> => (contains? [1 3 4] 2)
> true
> => (contains? [1 3 4] '2)
> true
> => (contains? [1 3 4] "2")
> false
>
> So if you were to use this generically on any collection, you'd maybe
> expect it to throw for vector as it does for string collection.
>
> Thanks for replying, Michael.
>
>
> On Fri, Mar 1, 2013 at 6:03 PM, Michael Gardner <gardne...@gmail.com>wrote:
>
>> On Feb 28, 2013, at 17:17 , AtKaaZ <atk...@gmail.com> wrote:
>>
>> > According to this, can a vector have keys that are not numbers? like :a
>> , if not, then wouldn't it make more sense that
>> > (contains? [:a :b :c] :a)  would throw ? It's probably just me.
>>
>> This is a reasonable point, and one I haven't seen made before. The only
>> problem I can see with throwing an exception is that one might sometimes
>> wish to deal with associative containers in a generic fashion, and thus end
>> up asking a vector if it contains a keyword or a string without doing so
>> explicitly. In that case you'd not want it to throw an exception any more
>> than the other associative collection types would.
>>
>> --
>> --
>> 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 unsubscribe from this group and stop receiving emails from it, send an
>> email to clojure+unsubscr...@googlegroups.com.
>> 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 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 unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to