这与许多其他问题/ العمليات Jira 相关,但我还没有发现一个专门针对这个问题。
因为如果使用了 get
调用的拆解值作为 not-found
,当您使用 :as
绑定一个对象并包括在 :or
中的默认值时,该对象将不会有这些默认值。
(defn example [{:keys [a b]
:or {a 1 b 2}
:as opts}]
(println a b opts))
(example {:a 5})
;=> 5 2 {:a 5}
这导致了我们在代码库中出现了微妙的错误,我们原本期望存在默认值,但它们并没有出现,或者当我们修改函数以使用 :as
和具体的值时,我们没有使用 {:pre [some-pred]}
来检查一个不变性(该不变性被违反了)。
要合并它们,您需要构建一个映射,然后执行 opts (conj defaults-map opts)
,但这需要第二次遍历键/符号/字符串,只选择在 :or
映射中的名称,还需要创建一个新的映射,或者可能反复调用 assoc
.
我认为这是可行的,但写起来可能会有些麻烦。