【问题标题】: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 表达式相比,它更冗长、语法更繁重且不够清晰。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-07
      • 2021-03-12
      • 2016-05-17
      • 2021-12-17
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多