object MatchApp extends App {
// 基础类型模式匹配
val names = Array("zhangsan", "lisi", "wangwu")
val name = names(Random.nextInt(names.length))
name match {
case "zhangsan" => println("张三")
case "lisi" => println("李四")
case _ => println("不认识")
}
def judgeGrade(name: String, grade: String): Unit = {
grade match {
case "A" => println("Excellent")
case "B" => println("Good")
case "C" => println("Just so so")
case _ => println("Go home feed pig")
case _ if (name == "lisi") => println(name + " go home feed pig")
}
}
judgeGrade("zhangsan", "A")
judgeGrade("lisi", "D") // 双重过滤
// 数组模式匹配
def arrayGreeting(array: Array[String]): Unit = {
array match {
case Array("zhangsan") => println("Hi:zhangsan")
case Array(x, y) => print("Hi:" + x + " , " + y)
case Array("zhangsan", _*) => println("Hi:zhangsan and other friends..")
case _ => println("Hi: everybody...")
}
arrayGreeting(Array("zhangsan"))
// List模式匹配
def listGreeting(list: List[String]): Unit = {
list match {
case "zhangsan" :: Nil => println("Hi:zhangsan")
case x::y::Nil => println("Hi:" + x +" , " + y)
case "zhangsan"::tail => println("Hi:zhangsan and other friends")
case _ => println("Hi,everybody..")
}
}
listGreeting(List("zhangsan","lisi"))
// 类型匹配
def matchType(obj:Any): Unit ={
obj match{
case x:Int =>println("Int")
case s:String =>println("String")
case m:Map[_,_] =>m.foreach(println)
case _ => println("other type")
}
}
matchType(1f)
// 异常处理
try{
val i = 10/0
println(i)
}catch{
case e:Exception => println(e.getMessage)
}finally {
// 释放资源,一定执行
}
// 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
caseclassMath(CTO("zhangsan","22"))
}
}