понедељак, 15. септембар 2014. 04.23.41 UTC+2, Tobias Kortkamp је 
написао/ла:

> Hi, 
>
> you need to syntax-quote the list you return from your macro. 
>
>    (defmacro some-record 
>      [some-name] 
>      `(defrecord ~some-name ['in 'out])) 
>
> Note the backtick `. You then also have to explicitly quote your record 
> field names (see 'in and 'out, try to remove the quotes to see why). 
> Also see 
> http://clojure.org/reader#The%20Reader--Macro%20characters 
> and http://www.braveclojure.com/writing-macros/ 
>
> HTH 
>
>
Thanks for response Tobias.

Oh effin backtick:) I didn't realize that there are ` and '.
But your example didn't quite work. 

*user=> (defmacro my-record*
*  #_=> [my-name]*
*  #_=> `(defrecord ~my-name ['in 'out]))*
*#'user/my-record*
*user=> (my-record A)*

CompilerException java.lang.ClassCastException: clojure.lang.Cons cannot be 
cast to clojure.lang.Symbol, compiling:(NO_SOURCE_PATH:1:1) 

I needed to add ~ in order to make this work.

*user=> (defmacro my-record*
*  #_=> [my-name]*
*  #_=> `(defrecord ~my-name [~'in ~'out]))*
*#'user/my-record*
*user=> (my-record A)*
*user.A*
*user=> (->A 1 2)*
*#user.A{:in 1, :out 2}*
 

-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to