作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我收到错误:
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 case: _ 时,它正确运行,如下所示。
val test = "SomeStringValue"
test match {
case "Name" => println("Name")
case "Age" => println("Age")
case "Sex" => println("Sex")
case _ => println("Nothing Matched!!")
}
问题:Scala 中的 case 构造中应该始终存在匹配值的原因是什么?
最佳答案
match
构造本身就是一个表达式。
假设您没有 println
语句,而是整数,那么整个 block 将是 Integer
类型的值:
val test = "SomeStringValue"
val count: Int = test match {
case "Name" => 1
case "Age" => 2
case "Sex" => 3
}
现在,count
应该是什么值?这就是为什么 match
语句必须处理所有可能的情况。
在某些情况下(例如,当针对密封特征
或密封抽象类
进行模式匹配时),编译器将能够向您发出警告,但大多数情况下的时候,错误会在运行时抛出,所以你真的需要小心。
关于scala.MatchError : <SomeStringvalue> (of class java. lang.String),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43400055/
我收到错误: Exception in thread "main" scala.MatchError: SomeStringValue (of class java.lang.String) 我发现它
我是一名优秀的程序员,十分优秀!