我经常遇到以下问题:
val b = a match {
case Some(a) => "1"
case None => "n"
}
val c = a match {
case Some(a) => "2"
case None => "n"
}
显然,即使只需要一次,匹配也会执行两次。我如何确保编译器考虑到这一点?
我经常遇到以下问题:
val b = a match {
case Some(a) => "1"
case None => "n"
}
val c = a match {
case Some(a) => "2"
case None => "n"
}
显然,即使只需要一次,匹配也会执行两次。我如何确保编译器考虑到这一点?
我认为不会有任何性能提升,但您可以这样编写代码:
val (b, c) = a match {
case Some(a) => ("1","2)
case None => ("n", "n")
}
匹配可以非常快——与 if 语句相比。不要担心做两次工作,除非这是一场艰难的比赛。
匹配默认值比匹配另一种情况稍微容易一些,所以如果你真的不需要这个参数,你最好的选择是
val b = a match { case None => "n"; case _ => "1" }
val c = a match { case None => "n"; case _ => "2" }
这通常甚至会胜过可变解决方案,例如
var b,c = "n"
a match { case Some(_) => b = "1"; c = "2"; case _ => }
并且肯定会优于任何元组创建。
如果匹配是一个耗时的匹配,那么您必须存储结果并以元组或其他合适的数据结构返回它们,正如 om-nom-nom 已经证明的那样。这也可能更清楚,具体取决于上下文。