> How did you know that it delegates to 'get'?

sorry, I rushed that part.

the keyword and symbol are instances of clojure.lang.Keyword and
clojure.lang.Symbol
which are _java_ classes found in Keyword.java and Symbol.java (I
found these in the src/jvm directory)


These are what the invoke( ) methods looks like for the single and
double arity of both these classes (this is _java_ code):

/**
 * Indexer implements IFn for attr access
 *
 * @param obj - must be IPersistentMap
 * @return the value at the key or nil if not found
 * @throws Exception
 */
public Object invoke(Object obj) throws Exception{
    return RT.get(obj, this);
}

public Object invoke(Object obj, Object notFound) throws Exception{
    return RT.get(obj, this, notFound);
}


-----------------
which in turn goes to RT.java

static public Object get(Object coll, Object key){
    if(coll == null)
        return null;
    else if(coll instanceof Associative)
        return ((Associative) coll).valAt(key);
    else if(coll instanceof Map)
        {
        Map m = (Map) coll;
        return m.get(key);
        }
    else if(coll instanceof IPersistentSet)
        {
        IPersistentSet set = (IPersistentSet) coll;
        return set.get(key);
        }
    else if(key instanceof Number && (coll instanceof String ||
coll.getClass().isArray()))
        {
        int n = ((Number) key).intValue();
        if(n >= 0 && n < count(coll))
            return nth(coll, n);
        return null;
        }

    return null;
}
static public Object get(Object coll, Object key, Object notFound){
    if(coll == null)
        return notFound;
    else if(coll instanceof Associative)
        return ((Associative) coll).valAt(key, notFound);
    else if(coll instanceof Map)
        {
        Map m = (Map) coll;
        if(m.containsKey(key))
            return m.get(key);
        return notFound;
        }
    else if(coll instanceof IPersistentSet)
        {
        IPersistentSet set = (IPersistentSet) coll;
        if(set.contains(key))
            return set.get(key);
        return notFound;
        }
    else if(key instanceof Number && (coll instanceof String ||
coll.getClass().isArray()))
        {
        int n = ((Number) key).intValue();
        return n >= 0 && n < count(coll) ? nth(coll, n) : notFound;
        }
    return notFound;

}


---------

all really cool....


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

Reply via email to