这是滥用Scala模式匹配吗?

时间:2017-12-08 11:51:05

标签: scala functional-programming

与大多数语言一样,Scala有一个if语句。但是,使用模式匹配,我可以使用以下形式的代码实现精确(?)相同的结果:

(condition) match {
  case true =>  { /* handle the true case */ }
  case false => { /* handle the false case */ }
}

这感觉就像滥用机制一样,但我发现很难解释原因。聪明的头脑可以帮助我理解这个位置吗?

2 个答案:

答案 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表达式更冗长,语法更重,更不清晰。