Am Dienstag, 13. November 2012 12:06:10 UTC+1 schrieb Christophe Grand: > > (symbol (str ":" (str (first components)))) should be (keyword (first > components)) > In your expansion, :x is not a keyword but a symbol starting by a colon -- > the symbol fn performs no validation on its input. > When you copied/pasted it for evaluation it was then read as a keyword. > I understand
> > Btw I'm a little worried: are you planning to generate accessors for your > fields or are you just toying with macros? > both, I am learning about macros and I enjoy to build an alternative syntax for records; I know that the keywords can be uses as accessors thanks Johannes > > > On Tue, Nov 13, 2012 at 11:06 AM, Johannes > <bra...@nordakademie.de<javascript:> > > wrote: > >> Hi, >> >> I define a record >> (defrecord point [x y]) >> >> and the following macro: >> >> (defmacro drg >> [typename components] >> `(def ~(symbol (str typename "-" (str (first components)))) >> (fn [~(symbol "obj")] (get ~(symbol "obj") ~(symbol (str ":" (str >> (first components)))))))) >> >> the call >> user> (macroexpand-1 '(drg point [x y])) >> >> delivers what I expect: >> (def point-x (clojure.core/fn [obj] (clojure.core/get obj :x))) >> >> Evalutating this expression at the repl delivers what I expect: >> user> (def point-x (clojure.core/fn [obj] (clojure.core/get obj :x))) >> #'user/point-x >> >> But calling the macro results in an error message: >> user> (drg point [x y]) >> CompilerException java.lang.RuntimeException: Unable to resolve symbol: >> :x in this context, compiling:(NO_SOURCE_PATH:1) >> >> Can anyone tell me what my mistake is? >> >> Johannes >> >> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clo...@googlegroups.com<javascript:> >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+u...@googlegroups.com <javascript:> >> For more options, visit this group at >> http://groups.google.com/group/clojure?hl=en > > > > > -- > Professional: http://cgrand.net/ (fr) > On Clojure: http://clj-me.cgrand.net/ (en) > -- 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