为了文档说明的目的,对 keys 进行解构是否是良好的风格?我之所以询问这个问题,是因为 clj-kondo,Clojure 的一个代码检查器,报告了未使用绑定。例如:
(let [x 1, y 2] y)
结果产生关于 x
未使用的警告。
有时人们这么做
(defn public-foo [{:keys [foo bar] :as x}]
(private-baz x))
只是为了得到更好的对 public-foo
的文档字符串(或生成的文档)。但他们将得到关于 foo
和 bar
未使用的警告。一个例子:在 GitHub 上的 链接。
在性能方面,解构并不是免费的,因此,使用 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 解构在函数参数中引入的未使用绑定产生的警告之前,我希望在这方面达成共识。