понедељак, 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.