这是意外发现的
由于对每个单元格调用 quote?
并使用集合作为条件判断
#{separator quote \return \newline}
在编译时不是一个常量表达式,因此对于每个单元格,将最终调用 clojure.lang.RT.set
。
对于诸如
(def xs (vec (for [_ (range 1000)]
(mapv identity (range 10)))))
它最终会消耗大约 50% 的 CPU
可以通过在 write-csv
内部将其绑定到局部变量中来轻松避免
如果编译器能检测到这一点会很好
谢谢
Ben