Re: (dir *ns*) doesn't work??

2011-10-27 Thread Matjaz Gregoric
The dir macro is quite picky in what it accepts as arguments. Try:

(dir user)
(dir clojure.core)




On Thu, Oct 27, 2011 at 10:57 AM, 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

Re: (dir *ns*) doesn't work??

2011-10-27 Thread Ben Smith-Mannschott
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


Re: (dir *ns*) doesn't work??

2011-10-27 Thread jaime
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