scala.MatchError:<somestringvalue>(类java.lang.String)

时间:2017-04-13 19:14:51

标签: scala

我收到了错误:

Exception in thread "main" scala.MatchError: SomeStringValue (of class java.lang.String)

我发现它是因为&#34; SomeStringValue&#34;在任何情况下都没有出现:

val test = "SomeStringValue"
test match {
  case "Name" => println("Name")
  case "Age"  => println("Age")
  case "Sex"  => println("Sex")
}

当我添加else案例时:_它正确运行如下。

val test = "SomeStringValue"
test match {
  case "Name" => println("Name")
  case "Age"  => println("Age")
  case "Sex"  => println("Sex")
  case _      => println("Nothing Matched!!")
}

问题:Scala中的case构造中应该始终存在匹配值的原因是什么?

1 个答案:

答案 0 :(得分:8)

match构造本身就是一个表达式。

假设您使用println语句而不是Integer语句,那么整个块将是val test = "SomeStringValue" val count: Int = test match { case "Name" => 1 case "Age" => 2 case "Sex" => 3 } 类型的值:

count

现在,match应该是什么价值?这就是sealed trait语句必须处理所有可能情况的原因。

在某些情况下(例如与sealed abstract classIEnumerable<Card>进行模式匹配时),编译器将能够向您发出警告,但大多数情况下,错误将被抛出运行时,所以你真的需要小心它。