使用 keys 解构用于文档化理由是否是好的风格?我提问的原因是 clj-kondo,Clojure 的一个 linter 报告未使用的绑定。例如:
(let [x 1, y 2] y)
会导致关于 x
未使用的警告。
有时人们这样做
(defn public-foo [{:keys [foo bar] :as x}]
(private-baz x))
只是为了获得更好的 public-foo
文档字符串(或生成的文档)。但他们会收到关于 foo
和 bar
未使用的警告。野生动物中的例子:[链接](https://github.com/cljdoc/cljdoc/blob/d54cb58b20d2b4cb1e7c714b3637aa8b89956ce0/src/cljdoc/server/ingest.clj#L16)
解构不是免费的,在 性能 上,所以使用 spec 或 :arglists
可能是获得这些文档收益的更好的替代品。例如:
user=>
(defn public-foo
{:arglists '([{:keys [foo bar] :as x}])}
[x]
;; (private-baz x)
)
#'user/public-foo
user=> (doc public-foo)
-------------------------
user/public-foo
([{:keys [foo bar], :as x}])
nil
在我在 clj-kondo 中添加配置以抑制由函数参数中的 keys 解构引起的未使用绑定的警告之前,我想要达成一些共识。