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

Reply via email to