2

考虑这个scala代码

val word = str.toLowerCase
val chars = word.distinct.sorted

然后稍后

//chars.map(c => str.toLowerCase.count(_ == c))
chars.map(c => word.count(_ == c))

我创建了val word以避免为地图创建新的小写字符串。但是,理论上,Scala 编译器可以优化掉它吗?它知道字符串是不可变的。

4

1 回答 1

7

如果编译器不知何故知道它.toLowerCase总是返回相同的结果并且没有任何副作用,它可以.toLowerCase将同一对象的多次调用优化为一次调用。但是,它不知道这一点,在你的例子中它甚至不是真的。例如,根据使用的默认语言环境,"I".toLowerCase可能是"i""ı"。由于默认语言环境可以在调用之间更改,因此这种优化将无效。

于 2012-10-27T15:24:47.080 回答