我收到了错误:
Exception in thread "main" scala.MatchError: SomeStringValue (of class java.lang.String)
我发现它是因为" SomeStringValue"在任何情况下都没有出现:
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构造中应该始终存在匹配值的原因是什么?
答案 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 class
或IEnumerable<Card>
进行模式匹配时),编译器将能够向您发出警告,但大多数情况下,错误将被抛出运行时,所以你真的需要小心它。