[clojure] repl - xieyunzi/xieyunzi.github.io GitHub Wiki

repl=> (dir clojure.repl)
apropos
demunge
dir
dir-fn
doc
find-doc
pst
root-cause
set-break-handler!
source
source-fn
stack-element-str
thread-stopper
nil

repl=> (source dir)
(defmacro dir
  "Prints a sorted directory of public vars in a namespace"
  [nsname]
  `(doseq [v# (dir-fn '~nsname)]
     (println v#)))
nil

repl=> (find-doc "dir-fn")
-------------------------
clojure.repl/dir-fn
([ns])
  Returns a sorted seq of symbols naming public vars in
  a namespace
nil

repl=> (source clojure.repl/dir-fn)
(defn dir-fn
  "Returns a sorted seq of symbols naming public vars in
  a namespace"
  [ns]
  (sort (map first (ns-publics (the-ns ns)))))
nil

repl=> (doc the-ns)
-------------------------
clojure.core/the-ns
([x])
  If passed a namespace, returns it. Else, when passed a symbol,
  returns the namespace named by it, throwing an exception if not
  found.

repl=> (ns-publics (the-ns 'clojure.repl))
{source-fn #'clojure.repl/source-fn, doc #'clojure.repl/doc, stack-element-str #'clojure.repl/stack-element-str, find-doc #'clojure.repl/find-doc, dir #'clojure.repl/dir, pst #'clojure.repl/pst, dir-fn #'clojure.repl/dir-fn, source #'clojure.repl/source, set-break-handler! #'clojure.repl/set-break-handler!, root-cause #'clojure.repl/root-cause, demunge #'clojure.repl/demunge, thread-stopper #'clojure.repl/thread-stopper, apropos #'clojure.repl/apropos}

repl=> (map first (ns-publics (the-ns 'clojure.repl)))
(source-fn doc stack-element-str find-doc dir pst dir-fn source set-break-handler! root-cause demunge thread-stopper apropos)

repl=> (sort (map first (ns-publics (the-ns 'clojure.repl))))
(apropos demunge dir dir-fn doc find-doc pst root-cause set-break-handler! source source-fn stack-element-str thread-stopper)

https://kotka.de/blog/2012/06/Did_you_know_IX.html

repl=> (first "ok")
\o
repl=> (.invoke first "ok")
\o
repl=> (first [1 2 3])
1
repl=> (.invoke first [1 2 3])
1