2024 Clojure 发展状况调查 中分享您的想法!

欢迎!有关如何使用本平台的更多信息,请参阅关于页面。

0
集合
已关闭 关闭者

我想知道为什么 merge 函数没有使用暂存,是否有更优的版本。

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

我们可以使用 transducers 来保持代码可读性,并提高性能
(defn merge [& maps] (when (some identity maps) (into {} cat maps)))

已关闭,作为 增强映射合并性能 的重复问题
也许还可以用其他方法,而不是使用通用的 transducer `cat`,也许可以更进一步增加性能。
同样,这种不使用暂存的情况也出现在 `clojure.set` 函数中,以及其他一些函数中。
也许地图上的连接操作也应该改变?目前我不明白为何不使用瞬时(transients)?
...