我执行以下操作:
(defn ss [] "kjhhj")
(doc ss)
但是返回“nil”。这是为什么?
如果我这样做:
(defn tt "kjhhj" [] 1)
(str (doc tt) )
如图所示我得到一个空字符串...“doc”输出是否转到 out 或其他什么东西?
答案 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。