模式匹配

Java中 case when:对一个值进行条件判断,返回针对不同的条件进行不同的处理
Scala语法:
变量 match{
case value1 => 代码一
case vlaue2 => 代码二
...
case _ => 代码N
}

package com.yy.scala

object MatchApp extends App {

  matchName("Tom", 60)
  matchName("Lucy", 60)

  matchArray(Array("Tom","Lily"))

  matchList(List("Tom","Lily","Lucy"))

  matchType(1)
  matchType(Map("age"->12))

  caseclassMath(CTO("David", "10"))
  caseclassMath(Employee("Kit", "14"))

  //基础类型匹配
  def matchName(name: String, age : Int): Unit ={
    name match {
      case  "Tom" => println("汤姆")
      case  "Jim" => println("吉姆")
      case  _ if age > 50  => println("old "+name)
      case  _ => println("young "+name)
    }
  }

  //数组匹配
  def matchArray(array:Array[String]) = {
    array match {
      case  Array("Tom") => println("Hello Tom")
      case  Array(x,y) => println("Hello "+x+","+y)
      case  Array("Tom",_*)  => println("Hello Tom and other friends")
      case  _ => println("Hello everybody")
    }
  }

  //List匹配
  def matchList(list:List[String]) = {
    list match {
      case  "Tom"::Nil => println("Hello Tom")
      case  x::y::Nil => println("Hello "+x+","+y)
      case  "Tom"::tail  => println("Hello Tom and other friends")
      case  _ => println("Hello everybody")
    }
  }

  //类型匹配
  def matchType(obj:Any) = {
    obj match {
      case i:Int => println("Int")
      case s:String => println("String")
      case m:Map[_,_] => m.foreach(println)
      case _ => println("other type")
    }
  }

  //case class模式匹配
  def caseclassMath(person: Person): Unit ={
    person match {
      case CTO(name,floor) => println("CTO name is "+name+", floor is" + floor)
      case Employee(name,floor) => println("Employee name is "+name+", floor is" + floor)
      case _ => println("other")
    }
  }

  class Person
  case class CTO(name:String, floor:String) extends Person
  case class Employee(name:String, floor:String) extends Person
  case class Other(name:String) extends Person
}
12-24 02:07