>> The idea is that foo will be defined and that {:foo-tag "blah"} is
>> added to its meta-data.
... and to explain *why*:
user=> (pprint
(read-string "(defmacro my-defn [name & body]
`(defn- #^{ :foo-tag \"blah\" } ~name []
~...@body))"))
(defmacro
my-defn
[name & body]
(clojure.core/seq
(clojure.core/concat
(clojure.core/list 'clojure.core/defn-)
(clojure.core/list name)
(clojure.core/list
(clojure.core/apply
clojure.core/vector
(clojure.core/seq (clojure.core/concat))))
body)))
No mention of foo-tag in there.
#^ is a reader macro that annotates the next token read with metadata.
It's not a form that persists into the macroexpansion, so it doesn't
take effect in your generated defn-.
(There are good reasons for this, not just "that's the way it is": a
macro is just like any other function, and you might want to add
metadata such as type annotations just as you would in normal
functions.)
Using with-meta *does* pass through into the macroexpansion, which is
what you want.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---