匹配字符串
import scala.util.Random
object CaseDemo1 {
val arr = Array("YoshizawaAkiho", "YuiHatano", "AoiSola")
val name: String = arr(Random.nextInt(arr.length))
println(s"name is:$name")
name match {
case "YoshizawaAkiho" => println("吉泽")
case "YuiHatano" => println("波多老实")
case _ => println("笑贫不笑*")//最后一个选择_是因为需要一步一步执行 不管是啥都能接住
}
def main(args: Array[String]): Unit = {
CaseDemo1
}
}
匹配类型
object CaseDemo2 {
//匹配类型
val arr: Array[Any] = Array("hello", 1, -2.0, CaseDemo2)
val v: Any= arr(Random.nextInt(arr.length))
println(v)
v match {
case x: Int => println("Int" + x)
case y: String => println("String"+y)
case _ => println("爱啥啥")
}
def main(args: Array[String]): Unit = {
CaseDemo2
}
}
集合匹配
package com.doit.scala.day03.cases
object CaseDemo3 {
//匹配数组
val arr = Array(0, 1, 3, 4)
arr match {
case Array(1,x,y) =>println(x+ " " +y)
case Array(0,*) =>println("0...")
case _ => println("啥也不是")
}
//匹配List
val lst = List(0, 1, 2, 3)
lst match {
case 0 :: Nil => println("就0")
case 0 :: tail => println("0和很多")
case x :: y :: Nil => println("俩数")
case _ => println("啥也不是")
}
//匹配元组
val tup = (3, 3.0, "abc")
tup match {
case (2, x, y) => println(s"ok, $x , $y")
case (_, z, "abc") => println(z)
case _ => println("else")
}
}
匹配option
package com.doit.scala.day03.cases
object GetDemo {
def main(args: Array[String]): Unit = {
val mp = Map("a" -> 1, "b" -> 2, "c" -> 3)
//val r: Int = mp("d")
val r = mp.getOrElse("d", -1)
//Option代表:可能有,也可能没有
//Option有两个子类:Some 一定有 和 None 一定没有
val o: Option[Int] = mp.get("c")
val i = o match {
case Some(value) => value
case None => -1
}
println(i)
}
}
类名匹配
package com.doit.scala.day03.cases
//多例,不需要new,自动实现序列化接口
//case class的功能:注意的功能就是进行模式匹配,封装数据,匹配后进入到对应的case,执行对应逻辑
case class SubTask(id: String, var name: String)
case class Heartbeat(id: Long)
//case object,单例的,就一个实例,不封装数据
case object CheckTimeOut
object SubTask {
def main(args: Array[String]): Unit = {
val arr: Array[Product] = Array(new SubTask("100", "Submit"), SubTask("8888", "Submit888"), Heartbeat(200L), CheckTimeOut)
val ele = arr(3)
ele match {
case SubTask(id,name) => println("SubTask")
case Heartbeat(id) => println("Heart")
case CheckTimeOut => println("Check")
}
}
}