I either disagree or don't understand. The deftest macro doesn't touch your &body arg; it's expanded as-is. For example, (let [x 'foo] `(inc ~x)) doesn't result in foo getting qualified, and most macros behave the same way.
On Aug 15, 4:36 pm, Mark Rathwell <mark.rathw...@gmail.com> wrote: > Just to be clear, it is namespace resolved because of syntax quote: > > (defmacro deftest > [name & body] > (when *load-tests* > `(def ~(vary-meta name assoc :test `(fn [] ~@body)) > (fn [] (test-var (var ~name)))))) > > > > > > > > On Mon, Aug 15, 2011 at 7:23 PM, Alan Malloy <a...@malloys.org> wrote: > > Is it? That's neat; I guess I've never thought about how the compiler > > treats def. Thanks for the explanation. > > > On Aug 15, 3:03 pm, Mark Rathwell <mark.rathw...@gmail.com> wrote: > >> deftest is a macro. Macros are expanded at compile time. So, in this > >> case, at compile time, a function called namespace2 is def'd with meta > >> data :test set to the body of your deftest. > > >> All of that body is namespace resolved in macro expansion, before > >> in-ns is ever executed (which happens when you actually call the > >> namespace2 function created by the macro). Put another way, (def > >> anything 10) is namespace resolved to (def > >> learn.clojure.test.core/anything 10) at macro expansion time (compile > >> time), before the test function is ever called, and thereby before > >> in-ns is ever executed. > > >> Hope this helps. > >> On Mon, Aug 15, 2011 at 5:07 PM, Richard Rattigan <ratti...@gmail.com> > >> wrote: > > >> > I'm finding that namespaces don't seem to behave as I expect > >> > intuitively, or according to the reference. It's quite possible I'm in > >> > the wrong here though, as I'm just kicking clojure's tires at this > >> > point. > > >> > Here is the relevant doc: > > >> >http://clojure.org/special_forms > >> > (def symbol init?) > >> > Creates and interns or locates a global var with the name of symbol > >> > and a namespace of the value of the current namespace (*ns*). > > >> > In the test below, which succeeds, the var does not appear to end up > >> > in the "current namespace" per this definition. Am I misinterpreting > >> > something, or is this a deviation from the spec/reference? > > >> > (ns learn.clojure.test.core > >> > (:use [clojure.test])) > >> > (deftest namespace2 > >> > (in-ns 'my.new.namespace) > >> > ;confirm the current namespace > >> > (is (= "my.new.namespace" (str *ns*))) > >> > ;attempt to def a var in the current namespace > >> > (def anything 10) > >> > ;the var is not defined in the current namespace > >> > (is (nil? (ns-resolve *ns* 'anything))) > >> > ;the var is however definined in the orginal namespace > >> > (is (not (nil? (ns-resolve (find-ns 'learn.clojure.test.core) > >> > 'anything)))) > >> > (is (= 10 learn.clojure.test.core/anything))) > > > -- > > 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 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