出于文档化的原因,对键的解构是否是好风格?我之所以提出这个问题,是因为cloj-kondo,一个用于Clojure的代码合并器,报告了未使用的绑定。例如:
(let [x 1, y 2] y)
结果警告关于x
未经使用。
有时人们做这个
(defn public-foo [{:keys [foo bar] :as x}]
(private-baz x))
只是为了获得更好的关于public-foo
的文档字符串(或生成文档)。但他们将会收到关于foo
和bar
被未使用的警告。一个来自野外的例子:链接。
解构在性能方面不是免费的,因此使用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中添加任何配置以压制函数参数中由于键解构而引入的未使用绑定的警告之前,想就此达成共识。