> Renaming accessor functions has the benefit of help from the compiler,
> which will tell me if the function is not defined so I can easily
> change the client code to use new name.

I think you could just define vars that evaluate to keywords. Adopting
the convention as follows gives protection from the compiler and
affords backward compatibility:

user> (defmacro def-keywords [ks-form]
        `(do ~@(for [k (eval ks-form)]
           `(def ~(symbol (name k)) ~k))))
#'user/def-keywords

user> (def a-map {:good-1 11, :good-2 22})
#'user/a-map

user> (def-keywords (keys a-map))
#'user/good-2

user> (good-1 a-map)
11

user> (good-2 a-map)
22

user> (bad-1 a-map)
; ==> Unable to resolve symbol: bad-1 in this context

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