On Mon, May 9, 2011 at 16:21, Jonathan Fischer Friberg
<odysso...@gmail.com>wrote:

> Q1 This macro captures the correct namespace:
>
> (defmacro new* [type-name-as-symbol & args]
>   `(clojure.lang.Reflector/invokeConstructor
>      (ns-resolve ~*ns* ~type-name-as-symbol)
>      (to-array '~args)))
>

Unfortunately that doesn't work -- it captures the namespace in which new*
is called, but that may not be where the symbol is actually written.
 Consider this:

    (ns my-namespace
      (:refer dynamic-new))

    (defrecord MyRecord [a b c])

    (defn instantiate-using-parameter [type-name-as-symbol]
      (new* type-name-as-symbol 1 2 3))

    (in-ns 'another-namespace)
    (my-namespace/instantiate-using-parameter 'MyRecord)
    => #:my-namespace.MyRecord{:a 1, :b 2, :c 3}

Again, the use of syntax-quote would qualify the symbol in the right
namespace -- the one containing the source of the symbol.

Simon

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