scala - 优化对不可变对象(immutable对象)的冗余调用

标签 scala jvm

考虑这个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 以避免为 map 创建新的小写字符串。但是,理论上,Scala 编译器可以优化掉它吗?它知道字符串是不可变的。

最佳答案

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

关于scala - 优化对不可变对象(immutable对象)的冗余调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13101332/

相关文章:

Scala 枚举数据作为字符串?

scala - 哪些scala编译器插件可用?

garbage-collection - 是否-XX :+CMSIncrementalMode run on application threads or in GC-dedicated threads?

jvm - 为什么 javac 校验数组两次?

java - JVM 选项 : Xmx Allocation

java - javac 会生成静态桥接方法吗?

scala - Iterator[A] 类型的表达式不符合预期的 Iterator[A] 类型

scala - 如何使用 "Seq"字段修改此嵌套案例类?

scala - IOException : Cannot run program "javac": CreateProcess error=2, 系统找不到指定的文件

grails - 启动grails应用程序时出现问题