在 Clojure 中创建库时,最好在每个函数上包含文档字符串和其他元数据,例如:
(defn ^Boolean foo
"Returns whether x is bar."
{:added "1.5"}
[x]
(bar? x))
有时(使用高阶函数时)使用 def (something-that-returns-a-fn)
定义函数会更容易,像这样:
(defn wrapper [f]
"Some HOF, let's say it just prints 'WHARRGARBL' and then returns the fn."
(println "WHARRGARBL")
f)
(def foo
"Prints 'WHARRGARBL' and then returns whether x is bar."
(wrapper (fn [x] (bar? x))))
如果我没记错的话,以这种方式定义函数会抵消使用 defn
的优势-- 也就是说,以一种很好的方式打印文档字符串,而不是包含函数支持的参数,以及在函数定义中简洁地包含属性映射的能力。我是对的吗,还是有其他简洁的方法来记录通过 HOF 创建的函数?我可以这样做:
(defn foo
"Prints 'WHARRGARBL' and then returns whether x is bar."
{:added "1.5"}
[x]
((wrapper (fn [y] (bar? y))) x))
但这似乎有点多余和不必要的复杂,因为我将 x 的函数定义为 y 的函数,应用于 x。有更好的办法吗?
最佳答案
您可以使用 def
添加任何您想要的元数据。
(def ^{:doc "Does something."
:added "1.5"
:arglists '([x]) }
foo
(wrapper (fn [x] (bar? x))))
关于clojure - 使用无点样式定义的文档函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24439121/