and obviously I would like it to throw here instead :) but hey, that's just me - overly obsessed with fail-fast rather that performance first or tolerance
On Fri, Mar 1, 2013 at 9:12 PM, AtKaaZ <atk...@gmail.com> wrote: > 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 <gardne...@gmail.com>wrote: > >> On Mar 1, 2013, at 13:36 , 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. >> >> 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 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. > > -- 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.