可以匹配的类型:
1)匹配内容
//这里的=>不是函数,在这里表示模式匹配,如果匹配上则执行这里的业务逻辑
//类比法 JAVA : switch case
object CaseDemo01 extends App {
val arr = Array("tom", "mike", "hello")
val i = Random.nextInt(arr.length)
println(i)
val name = arr(i)
println(name)
//这里的=>不是函数,在这里表示模式匹配,如果匹配上则执行这里的业务逻辑
//类比法 JAVA : switch case
name match {
case "tom" => println("我是tom...")
case "mike" => {
println("我是mike'...")
}
case _ => println("真不知道你们在说什么...")
}
}
2)匹配类型
object CaseDemo02 extends App {
//定义一个数组
val arr: Array[Any] = Array("hello123", 1, -2.0, 2.0, CaseDemo02, 2L)
//取出一个元素
val elem = arr(5)
println(elem)
//这里的=>不是函数,在这里表示模式匹配,如果匹配上则执行这里的业务逻辑
elem match {
case x: Int => println("Int " + x)
case y: Double if (y <= 0) => println("Double " + y)
case z: String => println("String " + z)
case w: Long => println("long " + w)
case CaseDemo02 => {
val c = CaseDemo02
println(c)
println("case demo 2") //throw new Exception("not match exception")
}
case _ => { //表示什么都没匹配上,相当于switch中的default
println("no")
println("default")
}
}
}
3)匹配Array
println("******************匹配数组****************************")
val arr = Array(1, 1, 7, 0)
arr match {
case Array(0, 2, x, y) => println(x + " " + y)
case Array(1, 1, 7, 0) => println("0 ...")
case Array(1, 1, 7, y) => println("only 0 " + y)
case _ => println("something else")
}
4)匹配元组
println("******************匹配元组****************************")
val tup = (1, 3, 8)
tup match {
case (1, x, y) => println(s"hello 123 $x , $y")
case (_, w, 5) => println(s"w:${w}")
case _ => println("else")
}
1)简单来说,scala的class,就是在普通类定义前加个case关键字,然后你就可以对这些类进行模式匹配
case class带来的最大的好处就是支持模式匹配
//样例类,模式匹配,封装数据(多例),不用new即可创建实例
case class SubmitTask(id: String, name: String)
case class HeartBeat(time: Long)
//样例对象,模式匹配(单例)
case object CheckTimeOutTask
/**
* 样例类demo
* 简单来说,scala的class,就是在普通类定义前加个case关键字,然后你就可以对这些类进行模式匹配
* case class带来的最大的好处就是支持模式匹配
*/
object CaseDemo04 extends App {
val arr = Array(CheckTimeOutTask, new HeartBeat(123), HeartBeat(88888), new HeartBeat(666), SubmitTask("0001", "task-0001"))
val a = arr(1)
println(a)
a match {
case SubmitTask(id, name) => {
println(s"$id, $name")
}
case HeartBeat(time) => {
println(time)
}
case CheckTimeOutTask => {
println("check")
}
}
}