Search code examples
clojuredocstring

Clojure: How to get a function docstring?


I am trying to get ONLY the docstring of a function in Clojure, nevertheless I have encountered several problems as all the functions that I find actually print the function signature + docstring.

So for example (doc map) will actually print something like.


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 ...

I am only interested in getting the docstring not printing it nor having its namespace or arity. What I am looking for is something like (get-doc function-name) which would return a string with

"Returns a lazy sequence consisting of the result of applying f to the ..."

Is this possible in Clojure?


Solution

  • You can do this:

    (:doc (meta #'map))
    

    map itself is just a symbol, that is, a name. This symbol resolves to a var, which is accessed by the special form #'map. The value of this var is the actual function, and the docstring for the function is stored as metadata on the var.

    Therefore, #'map gives you the var (this can also be done using (var map)), meta gives you the metadata for that var, and :doc extracts the docstring.

    For more information, have a look at var, metadata, and special forms.