模式匹配
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
}