1. 程式人生 > >Scala模式匹配和樣例類

Scala模式匹配和樣例類

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")
  }
}

注意:在Scala中列表要麼為空(Nil表示空列表)要麼是一個head元素加上一個tail列表。

9 :: List(5, 2)  :: 操作符是將給定的頭和尾建立一個新的列表

注意:: 操作符是右結合的,如9 :: 5 :: 2 :: Nil相當於 9 :: (5 :: (2 :: Nil))