为了文档书写原因而进行键解构是否是良好的样式?我之所以提问,是因为 clj-kondo,一个 Clojure 的 linter,会报告未使用的绑定。例如:
(let [x 1, y 2] y)
这会产生关于 x
未使用的警告。
有时人们这样做
(defn public-foo [{:keys [foo bar] :as x}]
(private-baz x))
只是为了获得对 public-foo
的更好的 docstring(或生成文档)。但他们将会收到关于 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 添加抑制函数参数中键解构引起的未使用绑定警告之前的配置支持之前,我希望就这个问题达成共识。