Matchcase

2 阅读1分钟

match case 的用法

package matchcase

object matchcase01 {
  def main(args: Array[String]): Unit = {
    println(getProvinceName(11))
    println(getProvinceName(42))
    println(getProvinceName(12))
  }
  def getProvinceName(case:Int):String = {
    code match{
      case 42 =>"湖北"
      case 11 =>"北京"
      case _ => "未知"
    }
  }

}
package matchcase

object matchcase02 {
  def main(args:Array[String]): Unit = {
    val xiaohong = (100,100,100)
    val xiaoming = (89,98)
    getScore(xiaohong)
    getScore(xiaoming)
    getScore((1,2,3,4))
  }
  def getScore(score:Any):Unit = {
    score match{
      case(a,b,c)=>println("元组中有三个元素:a="+a+"b="+b+"c="+c)
      case(a,b)=>println("元组中有两个元素:a="+a+"b="+b)
      case _ =>println("未知")
    }
  }

}

匹配变量类型

package matchcase

object matchcase03 {
  def main(args:Array[String]): Unit = {
    testType(1)
    testType(1.1)
    testType("1")
  }
  def testType(i:Any):Unit = {
    i match {
      case x:Int =>println("当前变量是:Int")
      case x:Double => println("当前变量是:Double")
      case _ => println("未知")
    }
  }

}

样例类及其属性

package matchcase

object matchcase05 {
  case class Circle(radius:Double)
  case class Rectangle(width:Double,height:Double)

  def getArea(obj:Any):Unit = {
    obj match{
      case Circle(radius)=>println("圆形的面积是:"+radius * radius * 3.14)
      case Rectangle(width,height)=>println("矩形的面积是:"+width+height)
      case _ =>println("未知")
    }
  }
  def main(args:Array[String]): Unit = {
    getArea(Circle(2))
    getArea(Rectangle(2,3))
    getArea("abc")
  }

}

变量声明中的模式匹配

package matchcase

object matchcase06 {
  def main(args:Array[String]): Unit = {
    val arr = Array(1,2,3,4,5)
    var a = arr(0)
    var b = arr(1)
    var c = arr(2)
    println("a = "+ a +" b = "+ b +"c = "+ c)
    val Array(x,y,z,_*) = arr
    println("x = " + x +"y = " + y + " z = " + z)
  }

}

守卫

case 模式 if 条件 => 执行的事情

package matchcase

object matchcase07 {
  def main(args:Array[String]):Unit = {
    val a =11
    a match{
      case x:Int if a > 10 => println("a 是大于10的Int")
      case _ => println("a is not Int")
    }
  }

}