在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Scala/ Scala模式匹配
Scala方法重載
Scala模式匹配
Scala throw關鍵字
Scala提取器
Scala概述
Scala throws關鍵字
Scala finally塊
Scala正則表達式
Scala循環(huán)語句
Scala多線程
Scala函數
Scala final關鍵字
Scala方法覆蓋
Scala字符串
Scala線程實現
Scala異常處理
Scala類和對象
Scala數據類型
Scala單例和伴生對象
Scala構造函數
Scala教程
Scala Case類和對象
Scala繼承
Scala開發(fā)環(huán)境安裝配置
Scala運算符
Scala文件I/O
Scala線程方法
Scala變量
Scala try-catch語句
Scala基礎語法
Scala集合
Scala數組
Scala閉包
Scala訪問修辭符
Scala this關鍵字

Scala模式匹配

模式匹配是Scala函數值和閉包后第二大應用功能。Scala為模式匹配提供了極大的支持,處理消息。

模式匹配包括一系列備選項,每個替代項以關鍵字大小寫為單位。每個替代方案包括一個模式和一個或多個表達式,如果模式匹配,將會進行評估計算。箭頭符號=>將模式與表達式分離。

嘗試以下示例程序,它顯示匹配的整數值。

示例

object Demo {
   def main(args: Array[String]) {
      println(matchTest(3))
   }

   def matchTest(x: Int): String = x match {
      case 1 => "one"
      case 2 => "two"
      case _ => "many"
   }
}

將上述程序保存在源文件:Demo.scala中,使用以下命令編譯和執(zhí)行此程序。

D:\>scalac Demo.scala
D:\>scala Demo
many

具有case語句的塊定義了一個將整數映射到字符串的函數。match關鍵字提供了一種方便的方式來應用一個函數(如上面的模式匹配函數)到一個對象。

請嘗試以下示例程序,其中的值與不同類型的模式相匹配。

object Demo {
   def main(args: Array[String]) {
      println(matchTest("two"))
      println(matchTest("test"))
      println(matchTest(1))
   }

   def matchTest(x: Any): Any = x match {
      case 1 => "one"
      case "two" => 2
      case y: Int => "scala.Int"
      case _ => "many"
   }
}

將上述程序保存在源文件:Demo.scala中,使用以下命令編譯和執(zhí)行此程序。

D:\>scalac Demo.scala
D:\>scala Demo
2
many
one

使用case類匹配

case類是用于與case表達式進行模式匹配的特殊類。在語法上,這些是帶有特殊修飾符的標準類:case。

嘗試以下,它是一個簡單的模式匹配示例使用case類。

object Demo {
   def main(args: Array[String]) {
      val alice = new Person("Alice", 25)
      val bob = new Person("Bob", 32)
      val charlie = new Person("Charlie", 32)

      for (person <- List(alice, bob, charlie)) {
         person match {
            case Person("Alice", 25) => println("Hi Alice!")
            case Person("Bob", 32) => println("Hi Bob!")
            case Person(name, age) => println(
               "Age: " + age + " year, name: " + name + "?")
         }
      }
   }
   case class Person(name: String, age: Int)
}

將上述程序保存在源文件:Demo.scala中,使用以下命令編譯和執(zhí)行此程序。

D:\>scalac Demo.scala
D:\>scala Demo
Hi Alice!
Hi Bob!
Age: 32 year, name: Charlie?

添加case關鍵字會導致編譯器自動添加一些有用的功能。該關鍵字表示與模式匹配中的case表達式的關聯。

首先,編譯器會自動將構造函數轉換為不可變字段(vals)。 val關鍵字是可選的。 如果想要可變字段,請使用var關鍵字。 因此,構造函數參數列表更短。

其次,編譯器會自動對類進行equals,hashCodetoString方法,該方法使用指定為構造函數參數的字段。 所以,我們不再需要自己的toString()方法。

最后,Person類的主體變?yōu)榭眨驗槲覀儧]有定義任何方法!


上一篇:Scala基礎語法下一篇:Scala方法重載