Scala模式匹配报错问题
2021-08-08 本文已影响0人
顺风飘千里
问题描述
定义一个字符串类型变量,传入一个只有整型类型的匹配和一个通配的匹配,不能正确匹配,需要将传入变量的类型范围放大。代码如下
scala> val a = 1
a: Int = 1
scala> a match {
| case x: Int => println("这是整型")
| case _ => println("这是其他类型")
| }
<console>:15: warning: unreachable code
case _ => println("这是其他类型")
^
这是整型
scala> val a = "string"
a: String = string
scala> a match {
| case x: Int => println("这是整型")
| case _ => println("这是其他类型")
| }
<console>:14: error: scrutinee is incompatible with pattern type;
found : Int
required: String
case x: Int => println("这是整型")
问题如上
但是如果将变量a的类型范围放大就能正确匹配
scala> val a:Any = "string"
a: Any = string
scala> a match {
| case x: Int => println("这是整型")
| case _ => println("这是其他类型")
| }
这是其他类型
具体原因需要看Scala源码分析,这里由于水平有限就不去翻源码了。