I was curious if it was possible to extend keyword lookup behavior to
additional types, such as java.util.Properties.

Currently I just convert java.util.properties into a keyword map with
something such as the following.
(defn as-keyword-map [prop]
  (into {} (for [[k v] prop] [(keyword k) v])))

This works well enough but I thought this might be possible to extend
keywords or java.util.Properties via protocols or something to change
the implementation of (:access-key prop) to (.get "access-key" prop).
Its easy enough to redefine get using multimethods so that (get
prop :access-key) would work on any type I wanted but I couldn't
figure out how to do the same with keywords.  Looking at keyword.java
it expects that object implements ILookup so I tried using (extend-
type java.util.Properties Lookup ...) however ILookup isn't a protocol
so this doesn't seem to work.

I'm beginning to think that implementation of keywords being
implemented in java doesn't support clojures more advanced
extensibility features.  This makes me wonder if using the more
idiomatic (:access-key obj) instead of (get obj :access-key) also
limits my future extensibility options.  Is there a way to do this
that I haven't thought of? and would it be possible to make ILookup
into a protocol to enable this type of extensibility?

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

Reply via email to