次のように、名前空間内のパブリック関数の名前とドキュメント文字列を返す関数を書きたいと思います。
(ns familiar.core
(:require [clojure.repl :refer [doc]]
...))
;; various functions with docstrings here
(defn help
"Halp!"
[]
(let [fns (keys (ns-publics 'familiar.core))]
(for [f fns]
[f (with-out-str (doc f))])))
REPLを呼び出す(help)
と、docstrings には関数が付属していません。
familiar.core=> (help)
([save-experiment ""] [load-experiment ""] [add-data ""] [help ""] ... )
しかし(with-out-str (doc add-data))
、REPL の呼び出しは期待どおりに機能します。
familiar.core=> (with-out-str (doc add-data))
"-------------------------\nfamiliar.core/add-data\n([& coll])\n
Adds instances of variables with values at active date.\n Examp
le:\n (add-data \"mice\" 6 \"cats\" 2 \"dogs\" 0)\n"
何が起きてる?