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

猜你喜欢

转载自blog.csdn.net/abcdefghwelcome/article/details/85835461