merge
实现为
(defn merge
;; stuff removed
[& maps]
(when (some identity maps)
(reduce1 #(conj (or %1 {}) %2) maps)))
这从几个方面来说并非最佳。 reduce1
比 reduce
慢(当映射的数量较少时可能并无影响,但更重要的是,当您只想合并两个映射时,它会做很多不必要的操作,因为合并两个映射基本上
(when (or m1 m2) (conj (or m1 {}) m2))
是否有一个针对此类情况优化的merge
的多参数版本是合理的?
快速基准测试显示在这种情况下有4倍的速度提升潜力。
我查看了Jira,但令人惊讶的是,我没有找到一个与此相关的票据?