Right, but I'm only after the when-invalid-key is passed:
valid:
=> (contains? "abc" 1)
true
=> (contains? ["a" "b" "c"] 1)
true

invalid:
=> (contains? "abc" "a")
IllegalArgumentException contains? not supported on type: java.lang.String
clojure.lang.RT.contains (RT.java:724)
=> (contains? ["a" "b" "c"] "a")
false


On Fri, Mar 1, 2013 at 9:02 PM, Maik Schünemann
<maikschuenem...@gmail.com>wrote:

> 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.
>
>
>



-- 
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.


Reply via email to