我正在尝试只获取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有可能吗?
答案 0 :(得分:9)
你可以这样做:
(:doc (meta #'map))
map
本身只是一个符号,即名称。此符号解析为var,可由特殊形式#'map
访问。此var的值是实际函数,函数的docstring作为元数据存储在var中。
因此,#'map
为您提供var(这也可以使用(var map)
完成),meta
为您提供该var的元数据,:doc
提取文档字符串
有关详细信息,请查看var,metadata和special forms。
答案 1 :(得分:1)
根据bsvingen的回答,我们可以定义一个返回docstring的宏,如:
(defmacro docstring [symbol]
`(:doc (meta (var ~symbol))))
如果我们特别希望它是一个功能,例如与地图一起使用时,您可以将其写为
(defn docstring [symbol]
(:doc (meta (resolve symbol))))