Scala模式匹配

49 阅读1分钟
def main(args: Array[String]): Unit = {
  println(getProvinceName(11))
  println(getProvinceName(42))
  println(getProvinceName(12))


}

def getProvinceName(code: Int):String={
  code match{
    case 42 =>"湖北"
    case 11 =>"北京"
    case _ =>"未知"

  }
}
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("元素中有2个元素","a"+a+"b"+b)
    case a=> println("元素中有1个元素","a"+a)

  }
def matchType(value: Any): Unit = {
  value match {
    case x: Int => println(s"${x} 是Int")
    case x: Double => println(s"${x} 是Double")
    case _ => println("未知")
  }
}

def main(args: Array[String]): Unit = {
  matchType(1)
  matchType(1.1)
}
  • 函数 matchType 接受 Any 类型参数,可以接收任意类型的值

  • case x: Int 匹配整型值,并将值绑定到变量x

  • case x: Double 匹配双精度浮点型值

  • 类型匹配在运行时进行,基于值的实际类型而非声明类型

  • 这种匹配方式在处理异构集合时特别有用

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

case class Circle(radius: Double) 定义圆形样例类

case class Rectangle(width: Double, height: Double) 定义矩形样例类

样例类自动获得:equals/hashCode方法、toString方法、copy方法、伴生对象apply/unapply方法

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

}