Как показать документацию в Clojure - PullRequest
3 голосов
/ 11 апреля 2011

Я делаю следующее:

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

но верните "ноль". Почему это?

Обновление:

Если я это сделаю:

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

как показано, я получаю пустую строку ... Вывод "doc" идет в out или что-то еще?

Ответы [ 3 ]

12 голосов
/ 11 апреля 2011

Строка документа стоит перед аргументами функции. Вы определили функцию без строки документации, которая возвращает строку.

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> 
7 голосов
/ 12 апреля 2011

Чтобы захватить вывод чего-либо, что печатается на * out *, используйте

(with-out-str (doc f))
3 голосов
/ 11 апреля 2011

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) всегда вернет ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...