由thheller评论
抱歉重新打开。
我在对我的代码进行性能分析时,注意到性能分析输出中有关于cljs.core/str的警告。
Chromes 报错:"未优化。参数值上下文错误",进一步查看 goog.string.buildString 的实现
goog.string.buildString = function(var_args) { return Array.prototype.join.call(arguments, ''); };
鉴于我们从未使用超过一个参数来调用它,这可能不是最好的实现选择。
也许可以跳过调用,并在行内化它
`
(defn str
如果没有参数,则返回空字符串。如果有参数 x,则返回
x.toString(). (str nil) 返回空字符串。如果有超过
一个参数,则返回参数 str 值的连接。
([] "")
([x] (if (nil? x)
""
(.join #js [x] "")))
([x & ys]
(loop [sb (StringBuffer. (str x)) more ys]
(if more
(recur (. sb (append (str (first more)))) (next more))
(.toString sb)))))
`
我没有跟从这个问题,但为什么我们不使用 .toString?buildString/array 方法似乎有些诡异?
我不太清楚总体影响,但自从 cljs.core/str 出现在我的配置文件中,我认为这应该进一步调查。