2024 Clojure 状态调查! 中分享您的想法。

欢迎!请参阅 关于 页面以了解更多关于如何使用此平台的信息。

0 投票
集合
已关闭

我想了解一下为什么 merge 函数不使用 transient(临时),以及是否有更好的版本。

而不是这个
(defn merge [& maps] (when (some identity maps) (reduce #(conj (or %1 {}) %2) maps)))

我们可以使用 transducers 保持代码仍然易于阅读,并且有更好的性能
(defn merge [& maps] (when (some identity maps) (into {} cat maps)))

关闭作为重复问题: 增强 map 合并的性能
您也可以用其他方式实现,而不是使用通用 transducer `cat`,可能为了额外一点性能。
不带 transient 的情况也出现在 `clojure.set` 函数和其他一些函数中。
地图上的连接操作可能也需要更改?目前我没有看到使用临时变量——为什么不呢?
...