2016-02-16 2 views
2

Я пытался спасти выход doc функции, например:Как получить результат функции `doc` в clojure?

user> (def doc-str-split (doc str/split)) 
------------------------- 
clojure.string/split 
([s re] [s re limit]) 
    Splits string on a regular expression. Optional argument limit is 
    the maximum number of splits. Not lazy. Returns vector of the splits. 
#'user/doc-str-split 

user> doc-str-split 
nil 
user> 

Однако я получил nil для doc-str-split. Я пытался получить type от doc выхода:

user> (type (doc str/split)) 
------------------------- 
clojure.string/split 
([s re] [s re limit]) 
    Splits string on a regular expression. Optional argument limit is 
    the maximum number of splits. Not lazy. Returns vector of the splits. 
nil 

Тем не менее получить nil. Как сохранить вывод функции doc?

ответ

7

Вы можете использовать with-out-str для захвата вывода, например, так:

user> (def doc-str-split (with-out-str (doc str/split))) 
#'user/doc-str-split 

user> (println doc-str-split) 
------------------------- 
clojure.string/split 
([s re] [s re limit]) 
    Splits string on a regular expression. Optional argument limit is 
    the maximum number of splits. Not lazy. Returns vector of the splits. 

nil 

user> (type (with-out-str (doc str/split))) 
java.lang.String 
+0

Ах, не знал об этой функции. Благодаря! – leeor

+0

'Clojure' полон удивительных, но полезных функций. Спасибо. – Nick

3

Вы можете получить только строку документации, как так:

user.core=> (def doc (prn (:doc (meta #'clojure.string/split)))) 
"Splits string on a regular expression. Optional argument limit is 
the maximum number of splits. Not lazy. Returns vector of the splits." 
Смежные вопросы