如何在Clojure中显示文档

时间:2011-04-11 14:24:08

标签: clojure

我执行以下操作:

(defn ss [] "kjhhj")
(doc ss)

但是返回“nil”。这是为什么?

更新

如果我这样做:

(defn tt "kjhhj" [] 1)
(str (doc tt) )

如图所示我得到一个空字符串...“doc”输出是否转到 out 或其他什么东西?

3 个答案:

答案 0 :(得分:12)

docstring位于函数的参数之前。您已定义了一个没有docstring的函数,该函数返回一个字符串。

user> (defn ss [] "kjhhj")
#'user/ss
user> (ss)
"kjhhj"
user> (doc ss)
-------------------------
user/ss
([])
  nil
nil

user> (defn tt "kjhhj" [])
#'user/tt
user> (tt)
nil
user> (doc tt)
-------------------------
user/tt
([])
  kjhhj
nil
user> 

答案 1 :(得分:7)

要捕获打印到* out *的内容的输出,请使用

(with-out-str (doc f))

答案 2 :(得分:3)

doc不返回任何内容,只是打印到屏幕上。看看来源

Clojure 1.3.0-master-SNAPSHOT
user=> (source doc)
(defmacro doc
  "Prints documentation for a var or special form given its name"
  {:added "1.0"}
  [name]
    (if-let [special-name ('{& fn catch try finally try} name)]
      (#'print-doc (#'special-doc special-name))
      (cond
        (special-doc-map name) `(#'print-doc (#'special-doc '~name))
        (resolve name) `(#'print-doc (meta (var ~name)))
        (find-ns name) `(#'print-doc (namespace-doc (find-ns '~name))))))

调用(str)on(doc)将始终返回nil。