[TOC]
# 简介
与default等效的捕获所有的`case _` 模式.如果没有模式匹配,抛出MatchError,每个case中,不用break语句.可以在match中使用任何类型,而不仅仅是数字
# 完全匹配
~~~
object CaseDemo extends App {
val arr = Array("111", "222", "333")
val name = arr(Random.nextInt(arr.length))
println(name)
name match {
case "111" => println("111")
case "222" => println("222")
case _ => println("nnnnnnnn")
}
}
~~~
# 类型匹配
~~~
object CaseDemo2 extends App {
val arr = Array("hello", 1, -2.0, CaseDemo2)
val elem = arr(2)
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 CaseDemo2 => {
println("case demo 2")
}
case _ => {
println("default")
}
}
# 打印类型
println(elem.getClass.getName)
}
~~~
提示: Map类型的泛型在匹配的时候,会自动删除泛型类型,只会匹配到Map类型,而不会精确到Map里面的泛型类型
~~~
var obj = Map("a" -> 1)
obj match {
case m1: Map[String, String] => println("这是Map[String, String]")
case m2: Map[String, Int] => println("这是Map[String, Int]")
}
println(obj + " : " + obj.getClass.getName)
~~~
# 数组匹配
~~~
object CaseDemo3 extends App {
val arr = Array(0, 1, 7, 0)
arr match {