clojure - 使用无点样式定义的文档函数

标签 clojure metadata docstring

在 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/

相关文章:

python - 是否可以在文档字符串中包含常量的值?

python - 如何使用 Sphinx 链接到 str 方法?

clojure - 大量的defrecord导致 "Method code too large"

metadata - 升级到 12.0.0 后,chef-solo 运行时出现元数据错误

python - 记录一流分配的功能

swift - 如何在 Swift 中显示当前运行的类和函数

hive - 有没有办法改变配置单元表中的列类型?

java - 如何在 Datomic 查询中使用/?

在 'rest arguments' 读取器宏之后带有 'discard' 宏的 Clojure 函数文字

Clojurescript 编译速度很慢