开发者学堂课程【Scala 核心编程 - 进阶:类型匹配的注意事项和细节】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/610/detail/9071
类型匹配的注意事项和细节
1.Map[String,Int]和Map[Int,String]是两种不同的类型,其它类推。
2.在进行类型匹配时,编译器会预先检测是否有可能的匹配,如果没有则报错。
案例:
val obj=10
val result=obj match{
case a:Int=>a
case b:Map[String.Int]=>"Map集合"
case _=>"啥也不是"
}
新建命名为 MatchTypeDetail,放入上方代码直接报错,编译器检测 case b:Map[String.Int]=>"Map集合"没有可能性,没有意义直接报错。
3.一个说明
val result=obj match {
case i:Int=>i
}case i:lnt=>i表示将i=obj(其它类推),然后再判断类型
4.如果 case_出现在match中间,则表示隐藏变量名。即不使用,而不是表示默认匹配。
//类型匹配obj可能有如下的类型
val a=7
val obj=if(a==1)1
else if(a == 2) "2"
else if(a==3)Bigint(3)
else if(a==4)Map("aa"-> 1)
else if(a==5)Map(1 ->"aa")
else if(a==6)Array(1,2,3)
else if(a== 7)Array("aa",1)
else if(a == 8) Array("aa")
val result=obj match{
case a:Int =>a
case k : Bigint => Int.MaxValue //看这里!
case b:Map[String,lnt]=>"对象是一个字符串-数字的Map集合"
case c:Map[Int,String]=>"对象是一个数字字符串的Map集合"
case d:Array[String]=>"对象是一个字符串数组”
case e:Array[Int]=>"对象是一个数字数组"
case _=>"啥也不是"
}
printin(result)
case k : Bigint => Int.MaxValue //看这里!可以直接写成 case _ : Bigint => Int.MaxValue //看这里!即隐藏变量名。