有时基于数据的语义进行合并是很重要的。不幸的是,当前merge-with的实现需要根据数据类型(值)猜测需要做什么。然而,语义要求了解我们正在尝试合并的键。
例如,在我们的应用中,键:messages
是一个数组,需要在合并时进行连接,而键:tags
则需要在合并时替换为最新值。
(merge-with into
{:messages [1 2 3] :tags [1 1 1]}
{:messages [4] :tags [4 4 4]})
=> {:messages [1 2 3 4] :tags [1 1 1 4 4 4]} ;; got
=> {:messages [1 2 3 4] :tags [4 4 4]} ;; expected
由于当前merge-with从未向合并函数提供键,因此没有方法来做这件事。