Scala模式匹配和样例类
Scala有一个十分强大的模式匹配机制,可以应用到很多场合,如switch语句、类型检查等,并且scala还提供了样例类,对模式匹配进行了优化,可以快速匹配
1.匹配字符串
package pricate
import scala.util.Random
object CaseDemo01 extends App {
val arr=Array("鲁班",1.2,1000)
val name=arr(Random.nextInt(arr.length))
name match{
case "鲁班" =>println("木匠鼻祖")
case double=>println("该数是双精度数")
case _=>println("10000")
}
}
2.匹配类型
package pricate.超类.Match
import scala.util.Random
object CaseDemo1 extends App {
//val v= if (x<>5) 1 else if(x<2) 2.0 else "hello"
val arr=Array("hello",1,2.3,CaseDemo1)
val v=arr(Random.nextInt(4))
println(v)
v match {
case x:Int=>println("Int"+x)
case y:Double if(y>0) =>println("Double"+y)
case z:String=>println("String"+z)
case _=>throw new Exception("not match exception")
}
}
注意:case y: Double if(y >= 0) => ...
模式匹配的时候还可以添加守卫条件。如不符合守卫条件,将掉入case _中
3.匹配数组、元组
package pricate
object CaseDemo03 extends App {
val arr=Array(1,3,5)
arr match{
case Array(1,x,y) =>println(x+ " "+y)
case Array(0) =>println("only 0")
case Array(0,_*) =>println("0.....")
}
val lst=List(0)
lst match{
case 0::Nil=>println("only 0")
case x::y ::Nil=>println(s"x:$x y:$y")
case 0::tail=>println("0....")
case _=>println("some else")
}
val tup=(2,3,7)
tup match{
case(1,x,y)=>println(s"1,$x,$y")
case(_,z,5)=>println(z)
case _=>println("esle")
}
}