Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
考虑这个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 编译器可以优化掉它吗?它知道字符串是不可变的。
val word
如果编译器不知何故知道它.toLowerCase总是返回相同的结果并且没有任何副作用,它可以.toLowerCase将同一对象的多次调用优化为一次调用。但是,它不知道这一点,在你的例子中它甚至不是真的。例如,根据使用的默认语言环境,"I".toLowerCase可能是"i"或"ı"。由于默认语言环境可以在调用之间更改,因此这种优化将无效。
.toLowerCase
"I".toLowerCase
"i"
"ı"