scala - scala 是否支持多个模式匹配的一个默认子句?

标签 scala pattern-matching

考虑下面的代码:

val first = ...
val second = ...
val third = ...
val fours = ...

first match {
  case "someString" => second match {
    case s:String => third match {
      case MyEnum.A => //some logic
      case MyEnum.B => fours match {
        case Some(old:String) => //some other logic
        case default=> defaulLogic
      }
      case default=> defaulLogic
    }
    case default=> defaulLogic
  }
  case default=> defaulLogic
}

private def defaulLogic()= {
    //log error here
}

有没有办法放case default逻辑到一个地方而不是在每个模式匹配中复制它?

备注

只有顶部match-case声明,其实还有更多的情况。

最佳答案

我会重写代码以使其更易于阅读:

(first, second, third, fours) match {
  case ("something", s: String, MyEnum.A, _) => //some logic
  case ("something", s: String, MyEnum.B, Some(old)) => //some other logic
  case _ => defaulLogic
}

如果你这样写,default case 会用更自然的方式写出来。

关于scala - scala 是否支持多个模式匹配的一个默认子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30476770/

相关文章:

java - 使用模式匹配器提取html

xml - Scala XML 模式匹配和属性

scala - 为什么 akka-http Unmarshaler 返回 Future[T] 而不是 T?

scala - 如何为 scala 中具有一个字段的案例类编写对称 Play Json 格式化程序?

javascript - 为什么这个正则表达式匹配?

clojure - 在 Clojure 中解构命令的惯用方法

python - 两个字符串之间最长匹配序列的正则表达式

java - Spark 使用 sc.textFile 从 S3 读取文件(“s3n ://. ..)

java - 动态规划中的第 n 个斐波那契数

scala - 如何创建具有特定版本的 Play 项目?