Oh yes you guys are right. I should have look at the source first:
(defmacro dir
  "Prints a sorted directory of public vars in a namespace"
  [nsname]
  `(doseq [v# (dir-fn '~nsname)]
     (println v#)))

from it, we can see the "quote" thing. Thank you all. I got it now!

On Oct 27, 5:12 pm, Ben Smith-Mannschott <bsmith.o...@gmail.com>
wrote:
> dir is a macro. It doesn't evaluate its arguments. So when you say
> (dir *ns*), Clojure sees: show me what's in the namespace named
> "*ns*", and there is no such namespace because *ns* is the name of a
> variable which contains the name of the current namespace.
>
> Dir is this way because for interactive use, it's convenient not to
> have to quote the symbol naming the namespace.  So (dir user) and (dir
> clojure.core) should work.
>
> In your situation you'll want to call dir-fn, which is a function that
> will evaluate its arguments, so:
>
> if we assume (= *ns* 'user) (i.e. you're currently in the namespace "user")
> (dir-fn *ns*)
> is equivalent to
> (dir-fn 'user)
> and
> (dir user)
>
> HTH
> // Ben
>
>
>
>
>
>
>
> On Thu, Oct 27, 2011 at 10:57, jaime <xiejianm...@gmail.com> wrote:
> > Hi there, when I tried to execute "(dir *ns*)" in REPL, I found it
> > doesn't work -- with exception of:
> >          Exception No namespace: *ns* found  clojure.core/the-ns
> > (core.clj:3689)
> > I'm not sure if I used it the right way. Following are my execution
> > tries:
> > =============================================================
> > Clojure 1.3.0
> > user=> (doc dir)
> > -------------------------
> > clojure.repl/dir
> > ([nsname])
> > Macro
> >  Prints a sorted directory of public vars in a namespace
> > nil
> > user=> (dir *ns*)
> > Exception No namespace: *ns* found  clojure.core/the-ns (core.clj:
> > 3689)
> > user=> *ns*
> > #<Namespace user>
> > user=> (the-ns *ns*)
> > #<Namespace user>
> > user=> (the-ns 'user)
> > #<Namespace user>
> > user=>
> > =============================================================
> > Any suggestions??
>
> > --
> > 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

Reply via email to