Hi Stuart Thanks for the explanation, that makes sense and I very much doubt I'd have figured that out by myself without a lot of head scratching. And you were right about the intern function, that does exactly what I was looking for.
Cheers Chris On Jul 14, 3:04 am, Stuart Sierra <the.stuart.sie...@gmail.com> wrote: > On Jul 13, 3:58 pm, Chris Kent <cjk...@gmail.com> wrote: > > > user=> (ns a) (def foo "foo") > > a=> #'a/foo > > a=> > > > If the same code is executed inside a do form the var is defined in > > the original namespace. I thought that the do should make no > > difference. Is this the intended behaviour? > > > user=> (do (ns a) (def foo "foo")) > > #'user/foo > > a=> > > Hi Chris, > > This involves some subtle details of how the Clojure Reader works, but > I'll try to explain what's going on. > > In your first example, the Reader reads the (ns...) form first, then > evaluates it, which sets the current namespace to "a". Then the > Reader reads the (def...) form, while it is in namespace "a". So, to > emphasize, we are in namespace "a" when the (def...) form is READ. > > In your second example, the Reader reads the entire (do...) form > before anything gets evaluated. At that time, we are still in the > "user" namespace. So the (def...) form gets READ in namespace "user". > > The crux is this: (def...) is a special form, so the usual rules don't > apply. In this case, what matters is when the (def...) form gets > READ, not when it gets evaluated. To get the behavior you expect, try > the "intern" function. > > -Stuart Sierra --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---