开发者学堂课程【Scala 核心编程 - 进阶:类型匹配的基本介绍和使用】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/610/detail/9070
类型匹配的基本介绍和使用
基本介绍
可以匹配对象的任意类型,这样做避免了使用 islnstanceOf 和 asInstanceOf 方法。
应用案例
下列代码命名为 MatchTypeDeme01
//类型匹配,obj 可能有如下的类型
val a=7
//说明 obj 实例的值根据 a 的值来返回
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")
如果 a=7返回到 Array,如果 a=3返回到 Bigint。
//说明
//1.根据 obj 的类型来匹配
//返回值
val result =obj match {
case a:Int =>a
case b:Map[String,Int]=>"对象是一个字符串-数字的Map集合"
case c:Map[Int,String]=>"对象是一个数字-字符串的Map集合"
case d:Array[String]=>"对象是一个字符串数组"
case e:Array[Int]=>"对象是一个数字数组"
case f:Bigint=>Int MaxValue
case_=>"啥也不是"
}
printin(result)
如果a=7就是 Array("aa",1) 与 case d:Array[String]=>"对象是一个字符串数组"和 case e:Array[Int]=>"对象是一个数字数组"都匹配失败,直接反馈"啥也不是"
如果传入8就是 Array("aa"),将 case d:Array[String]=>"对象是一个字符串数组"改为 case d:Array[String]=>d//"对象是一个字符串数组",运行结果是一个字符串。
注意:
如果在 case 后面是a:就相当于把 obj 的值赋给了a,如果是 Int 类型就将对象返回。Map[String,Int] 与 Map[Int,String] 不是同一类型。