Scala模式匹配和樣例類
阿新 • • 發佈:2019-01-05
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") } }