目前 mapv 对多个集合的处理方式为
(into [] (map f c1 c2 c3))
我建议将它们改为
(let [it1 (clojure.lang.RT/iter c1)
it2 (clojure.lang.RT/iter c2)]
(loop [out (transient [])]
(if (and (.hasNext it1) (.hasNext it2))
(recur (conj! out (f (.next it1) (.next it2))))
(persistent! out))))
这可能比原来快 5 倍。
对于可变数量参数,我们可以检查 colls 是否为 {{counted?}}
- 如果是:使用 {{MultiIterator}}
- 如果不是:像当前实现一样转发到 {{map}}
对这个有什么想法吗?或者这会不会导致某些功能失效?