gpt4 book ai didi

scala - Scala 的模式匹配器执行了多少优化?

转载 作者:行者123 更新时间:2023-12-03 16:11:08 26 4
gpt4 key购买 nike

假设我有一个 Scala match表达

foo match {
case Bar(Some(x)) => /* do something */
case Bar(None) => /* do something else */
}

编译器在编译表达式时做了多少优化?特别是,它是否多次调用 Bar.unapply ,还是只进行一次调用并多次匹配结果?

最佳答案

你可以用一点代码自己检查一下:

object Bar {
def unapply(x: Int): Option[Option[Int]] = {
println("Checking: " + x)
Some(None)
}
}

1 match {
case Bar(Some(x)) => println("do something")
case Bar(None) => println("do something else")
}

当你运行它时,你会得到:
Checking: 1
do something else

所以看起来Scala没有多次调用 Bar.unapply即使代码看起来会有多个调用。从效率的角度来看,这很好,但您可能应该避免 unapply 中的副作用。依赖它们的方法在每个匹配语句中被多次调用。

如果您担心优化何时发生并向读者明确说明 unapply只被调用一次,你可以很容易地拆分比赛:
1 match {
case Bar(y) => y match {
case Some(x) => println("do something")
case None => println("do something else")
}
}

关于scala - Scala 的模式匹配器执行了多少优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10526236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com