与大多数语言一样,Scala有一个if
语句。但是,使用模式匹配,我可以使用以下形式的代码实现精确(?)相同的结果:
(condition) match {
case true => { /* handle the true case */ }
case false => { /* handle the false case */ }
}
这感觉就像滥用机制一样,但我发现很难解释原因。聪明的头脑可以帮助我理解这个位置吗?
答案 0 :(得分:4)
我通常不会使用它,虽然是的,这是一个品味问题。但有些情况下我可能会采用这种结构。例如,当我需要发送一个更高阶函数时,它会显示Boolean
值(使用Scala的PartialFunction
语法):
future.onSuccess {
case true => ???
case false => ???
}
或者当有额外的条件时,就会出现以下问题:
value match {
case true if condition1 => ???
case true if condition2 => ???
case true if condition3 => ???
case false => ???
}
答案 1 :(得分:4)
匹配编译为等效的
val scrutinee = condition
if (scrutinee == true) /* handle success case */
else if (scrutinee == false) /* handle failure case */
else throw new MatchException()
所以它在语义上是相同的。但你为什么要这样?它比if
表达式更冗长,语法更重,更不清晰。