So I noticed some curious behaviour:

    (defmacro foo [body] {:env &env :form &form :body body})
    => #'user/foo

    (#'user/foo :body)
    => java.lang.IllegalArgumentException: Wrong number of args (1)
passed to: user$foo (NO_SOURCE_FILE:0)

    (#'user/foo :form :env :body)
    => {:env :env, :form :form, :body :body}

    (#'user/foo :form :env body)
    => Unable to resolve symbol: body in this context

So it appears when you call a macro by its var, it acts just like a
function, even though its metadata says it should be a macro.

    (:macro (meta #'foo))
    => true

I suspect the answer may just be "yeah... that's not something you
should do with macros", but I'm curious. I suppose the compiler only
checks the :macro metadata when it's literally in the call position
rather than when there's indirection through calling var?

-Phil

-- 
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