13.4 类型匹配
可以匹配对象的任意类型,这样做避免了使用isInstanceOf和asInstanceOf方法
package com.atguigu.day11.moshipipei
import scala.io.StdIn
object MatchType {
  def main(args: Array[String]): Unit = {
    //        var s: Any = Array(1, 2, 3)
    var s: Any = Map("a" -> 11, 2 -> 22)
    var result = s match {
      case a: Int => println(a); "匹配到的是 Int "
      case b: String => println(b); "匹配到的是 String "
      case c: Array[Int] => "匹配到的是 Array[Int] "
      case d: Map[Int, Int] => "匹配到的是Map[Int, Int]"
      case _: BigInt => "匹配到的是 BigInt"
      case _ => "啥都没有匹配到"
    }
    println(result)
  }
}
说明:
- 在进行类型匹配时,编译器会预先检测是否有可能的匹配,如果没有则报错 
- 如果类型匹配成功之后会把 - s的值赋值给- case后面跟着的变量, 而不需要做类型的转换.
- 对数组来说提供数组中元素的类型是必要的,因为数组的底层类型确实是确定的.比如: - Array[Int]这里的- Int是必须的
- 但是对集合类型比如 - Map, 提供泛型类型是无用的. 因为 Java 的"泛型擦除".- Map[Int, String]和Map[Int, Int]在匹配的时候没有区别. 所以应该使用通用的泛型:- Map[_, _]
package com.atguigu.day11.moshipipei
import scala.io.StdIn
object MatchType {
  def main(args: Array[String]): Unit = {
    var s: Any = Map("a" -> 11, "b" -> 22)
    var result = s match {
      case d: Map[_, _] => "匹配到的是Map"
      case _ => "啥都没有匹配到"
    }
    println(result)
  }
}