On Mon, Nov 9, 2009 at 5:50 PM, Alex Osborne <[email protected]> wrote:
> Mark Engelberg wrote:
> > 2009/11/9 Tiago Antão <[email protected]>:
> >> What is the rationale for even? and contains? having different
> >> behaviors for the exact same error (ie, one throws the other works
> >> fine and just returns false on a type error)?
>
> > I imagine the rationale is efficiency.
>
> Here's the function from clojure/lang/RT.java:
>
> static public Object contains(Object coll, Object key){
> if(coll == null)
> return F;
> else if(coll instanceof Associative)
> return ((Associative) coll).containsKey(key) ? T : F;
> else if(coll instanceof IPersistentSet)
> return ((IPersistentSet) coll).contains(key) ? T : F;
> else if(coll instanceof Map) {
> Map m = (Map) coll;
> return m.containsKey(key) ? T : F;
> }
> else if(key instanceof Number && (coll instanceof String ||
> coll.getClass().isArray())) {
> int n = ((Number) key).intValue();
> return n >= 0 && n < count(coll);
> }
> return F;
> }
>
Why not:
static public Object contains(Object coll, Object key){
if(coll == null)
return F;
else if(coll instanceof Map)
return ((Map) coll).containsKey(key) ? T : F;
else if(coll instanceof IPersistentSet)
return ((IPersistentSet) coll).contains(key) ? T : F;
else if(key instanceof Number && (coll instanceof String ||
coll.getClass().isArray())) {
int n = ((Number) key).intValue();
return n >= 0 && n < count(coll);
}
return F;
}
instead?
Oh, and who else finds it odd that the above implies that
user=> (contains? [1 2 3] 0.71)
true
when in actuality
user=> (contains? [1 2 3] 0.71)
false
despite
user=> (.intValue 0.71)
0
user=> (contains? [1 2 3] 0)
true
?
(I suppose T and F are static fields holding java.lang.Booleans, and this
code was written pre-autoboxing?)
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---