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.