我们在一个相当大的 Clojure 代码库上工作,并且遇到了很多这类问题。
免责声明,我们的设计理念是“一切皆图”,因此这个问题困扰了我们很长时间,拥有如下所示这样的解决方案可能存在争议
因此,我们使用了 :keys 和 :strs 来解构一个图
(def my-func [{:keys [a b c] :as z}])
问题是,对于调用者来说,很难知道函数最终从 z 图中使用了什么(总是可以 get
一些比解构出的更多的内容。更糟糕的是,my-func 将在别处传递 z,这使得没有遍历 z 所在的所有地方就无法重构代码
相反,我们可以这样操作(现在暂不关心命名)
(def my-func [{:keys-only [a b c] :as z}])
它只从图中提取出 a b c 键,这意味着函数有一个明确的协议说明需要什么。不再有重构挑战