This macroexpansion looks fine to me... but still gives an error when you
try to call (bar alex).

(defmacro bar
  [a]
  (let [b (keyword a)
        f-gensym (gensym "f")]
    `(let [~f-gensym (fn [& args#] ~b)]
       (deftype ~a []
         clojure.lang.ILookup
         (valAt [this# k#] (~f-gensym this# k#))
         (valAt [this# k# d#] (~f-gensym this# k# d#))))))

user=> (macroexpand-1 `(bar alex)) (pp)
...
(clojure.core/let
  [f174 (clojure.core/fn [& args__160__auto__] :user/alex)]
  (clojure.core/deftype
    user/alex
    []
    clojure.lang.ILookup
    (user/valAt
      [this__161__auto__ k__162__auto__]
      (f174 this__161__auto__ k__162__auto__))
    (user/valAt
      [this__161__auto__ k__162__auto__ d__163__auto__]
      (f174 this__161__auto__ k__162__auto__ d__163__auto__))))

Error when you call it:
user=> (bar alex)
CompilerException java.lang.RuntimeException: Unable to resolve symbol:
f177 in this context, compiling:(NO_SOURCE_PATH:85)

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