Clojure:如何获取函数文档字符串?
Clojure: How to get a function docstring?
我试图在 Clojure 中仅获取函数的文档字符串,但是我遇到了几个问题,因为我发现的所有函数实际上都打印了函数签名 + 文档字符串。
因此,例如 (doc map)
实际上会打印类似的内容。
clojure.core/map
([f coll] [f c1 c2] [f c1 c2 c3] [f c1 c2 c3 & colls])
Returns a lazy sequence consisting of the result of applying f to the ...
我只对获取文档字符串感兴趣,而不是打印它,也没有它的命名空间或元数。我正在寻找的是像
(get-doc function-name)
这将 return 一个带有
的字符串
"Returns a lazy sequence consisting of the result of applying f to the ..."
这在 Clojure 中可行吗?
你可以这样做:
(:doc (meta #'map))
map
本身只是一个符号,也就是一个名字。此符号解析为 var,可通过特殊形式 #'map
访问。此 var 的值是实际函数,函数的文档字符串作为元数据存储在 var.
因此,#'map
为您提供 var(这也可以使用 (var map)
完成),meta
为您提供该 var 的元数据,:doc
提取文档字符串。
有关详细信息,请查看 var, metadata, and special forms。
根据 bsvingen 的回答,我们可以定义一个宏,returns 文档字符串如下:
(defmacro docstring [symbol]
`(:doc (meta (var ~symbol))))
如果我们特别希望它是一个函数,例如与地图一起使用,您可以将其写为
(defn docstring [symbol]
(:doc (meta (resolve symbol))))
我试图在 Clojure 中仅获取函数的文档字符串,但是我遇到了几个问题,因为我发现的所有函数实际上都打印了函数签名 + 文档字符串。
因此,例如 (doc map)
实际上会打印类似的内容。
clojure.core/map
([f coll] [f c1 c2] [f c1 c2 c3] [f c1 c2 c3 & colls])
Returns a lazy sequence consisting of the result of applying f to the ...
我只对获取文档字符串感兴趣,而不是打印它,也没有它的命名空间或元数。我正在寻找的是像
(get-doc function-name)
这将 return 一个带有
"Returns a lazy sequence consisting of the result of applying f to the ..."
这在 Clojure 中可行吗?
你可以这样做:
(:doc (meta #'map))
map
本身只是一个符号,也就是一个名字。此符号解析为 var,可通过特殊形式 #'map
访问。此 var 的值是实际函数,函数的文档字符串作为元数据存储在 var.
因此,#'map
为您提供 var(这也可以使用 (var map)
完成),meta
为您提供该 var 的元数据,:doc
提取文档字符串。
有关详细信息,请查看 var, metadata, and special forms。
根据 bsvingen 的回答,我们可以定义一个宏,returns 文档字符串如下:
(defmacro docstring [symbol]
`(:doc (meta (var ~symbol))))
如果我们特别希望它是一个函数,例如与地图一起使用,您可以将其写为
(defn docstring [symbol]
(:doc (meta (resolve symbol))))