【问题标题】:Is this an abuse of Scala pattern matching?这是滥用 Scala 模式匹配吗?
【发布时间】:2017-12-08 11:51:05
【问题描述】:
与大多数语言一样,Scala 有一个if 语句。但是,使用模式匹配,我可以使用以下形式的代码实现完全相同的 (?) 相同结果:
(condition) match {
case true => { /* handle the true case */ }
case false => { /* handle the false case */ }
}
这感觉像是对机制的滥用,但我很难解释原因。聪明的头脑可以帮助我理解这个职位吗?
【问题讨论】:
标签:
scala
functional-programming
【解决方案1】:
我通常不会使用它,虽然是的,这是一个品味问题。但在某些情况下,我可能会求助于这种结构。例如,当我需要发送一个高阶函数作为参数时,该函数接收一个 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 => ???
}
【解决方案2】:
匹配编译为等价于
val scrutinee = condition
if (scrutinee == true) /* handle success case */
else if (scrutinee == false) /* handle failure case */
else throw new MatchException()
所以它在语义上是相同的。但你为什么要?与if 表达式相比,它更冗长、语法更繁重且不够清晰。