Clojure:如何获得函数docstring?

时间:2015-08-19 09:33:39

标签: clojure docstring

我正在尝试只获取Clojure中函数的文档字符串,但是我遇到了几个问题,因为我找到的所有函数实际上都打印了函数签名+ docstring。

因此,例如(doc map)实际上会打印出类似的内容。

        

clojure.core /地图

     

([f coll] [f c1 c2] [f c1 c2 c3] [f c1 c2 c3& colls])

     

返回一个延迟序列,该序列由将f应用于...

的结果组成

我只对让docstring不打印它,也没有它的名称空间或arity感兴趣。我正在寻找的是类似的东西 (get-doc function-name)将使用

返回一个字符串
  

“返回一个惰性序列,其中包含将f应用于...”

的结果

Clojure有可能吗?

2 个答案:

答案 0 :(得分:9)

你可以这样做:

(:doc (meta #'map))

map本身只是一个符号,即名称。此符号解析为var,可由特殊形式#'map访问。此var的值是实际函数,函数的docstring作为元数据存储在var中。

因此,#'map为您提供var(这也可以使用(var map)完成),meta为您提供该var的元数据,:doc提取文档字符串

有关详细信息,请查看varmetadataspecial forms

答案 1 :(得分:1)

根据bsvingen的回答,我们可以定义一个返回docstring的宏,如:

(defmacro docstring [symbol]
  `(:doc (meta (var ~symbol))))

如果我们特别希望它是一个功能,例如与地图一起使用时,您可以将其写为

(defn docstring [symbol]
   (:doc (meta (resolve symbol))))