scala模式匹配
模式匹配包含了一系列备选项,每个都开始于关键字 case。每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表达式。
match 对应 Java 里的 switch,但是写在选择器表达式之后。Scala的模式匹配除了可以对值进行匹配之外,还可以对类型进行匹配、对Array和List的元素情况进行匹配、对case class进行匹配、甚至对有值或没值(Option)进行匹配。
match 表达式通过以代码编写的先后次序尝试每个模式来完成计算,只要发现有一个匹配的case,剩下的case不会继续匹配。
对于Spark来说,Scala的模式匹配功能也是极其重要的,在spark源码中大量地使用了模式匹配功能。
1.基本语法
match case语法最基本的应用,就是对变量的值进行模式匹配
def match1(x:Int):String=x match{
case 1=>"one"
case 2=>"two"
case _=>"other" //其他选项用 "_"表示
}
println(match1(1)) //输出one
2.类型匹配
Scala模式匹配可以直接对类型匹配
def match1(x:Any) =x match{
case i:Int =>println("输入的值类型为Int类型,值为:"+i)
case j:String =>println("输入的值类型为String类型,值为:"+j)
case _ =>println("输入类型未知")
}
match1(2) //输入得值类型为Int类型,值为:2
案例:对异常进行匹配
def excepetionmatch(e:Exception)=e match{
case e1:IOException => println("error,IOException")
case e2:NullPointerException=> println("error,NullPointerException")
case e3:ClassNotFoundException=> println("error,ClassNotFoundException")
case _:Exception=> println("don't know")