#scala#模式匹配
//Scala的模式匹配程序nnobject PatternMatchingDemo {n def main(args: Array[String]): Unit = {n def matchingDemo(expr: Any) =n expr match {n case (a, b, c) => println("匹配具有三個元素的元組")n case m: Map[_, _] => println("匹配映射")n case e @ (a: Array[Int]) if a.length == 5 => e.map(_ * 2).foreach(println)n case _ =>n }nn matchingDemo((1, 2, "三"))n matchingDemo(Map(1 -> "First", 2 -> "Second", 3 -> "Third"))n matchingDemo(Array(2, 3, 5, 7, 11))n }n}n
輸出:
匹配具有三個元素的元組n匹配映射n4n6n10n14n22n[Finished in 2.8s]n
特別是:
case m: Map[_, _] => println("匹配映射")ncase e @ (a: Array[Int]) if a.length == 5 => e.map(_ * 2).foreach(println)n
這兩行代碼,要特別關注Type erasure(類型消除)。只有數組是特例,可以指定具體元素類型。其他結構就不行了,比如Map。
還運用了變數綁定e @ (a: Array[Int])以及Pattern guards(模式守衛)if a.length == 5,變數綁定之後,可以用e來指代(a: Array[Int]),模式守衛通過條件表達式限制只有長度為5個元素的數組才滿足匹配條件。
Scala的新特性非常多,多即複雜,但也意味著功能強大。總之,Scala還是挺有趣的......
推薦閱讀:
※【太閣x周刊】第十一期:紐約線下活動預告、技術討論群熱點話題、Scala中的Typeclass模式實例、人氣文章
※提議:在Dotty 中使用縮進語法
※Stack monads in Scala
※Scala快速入門-6-單例對象及伴生對象
※究竟使用什麼語言去計算?
TAG:Scala |