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

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

Scala提取器

Scala中的提取器是一個擁有稱為unapply方法,并使用unapply方法作為其成員之一的對象。 該unapply方法的目的是匹配一個值并將其分開。 通常,提取器對象還定義了一種用于構(gòu)建值的雙重方法,但這不是必需的。

示例

下面舉個例子來定義applyunapply方法。apply方法與Test轉(zhuǎn)換為可應(yīng)用于括號中的參數(shù)的對象,與apply方法相同。所以可以寫Test(“Maxsu”,“gmail.com”)來構(gòu)造字符串Maxsu@gmail.com。

unapply方法是將Test類轉(zhuǎn)換為提取器,并反轉(zhuǎn)了應(yīng)用的構(gòu)建過程。在應(yīng)用兩個字符串,并形成一個電子郵件地址字符串,取消應(yīng)用接收電子郵件地址并返回潛在的兩個字符串:地址的用戶和域。

語法

unapply("Maxsu@gmail.com") equals Some("Maxsu", "gmail.com")
unapply("Maxsu Ali") equals None

以下示例程序顯示電子郵件地址的提取對象。

object Demo {
   def main(args: Array[String]) {
      println ("Apply method : " + apply("Maxsu", "gmail.com"));
      println ("Unapply method : " + unapply("Maxsu@gmail.com"));
      println ("Unapply method : " + unapply("Maxsu Ali"));
   }

   // The injection method (optional)
   def apply(user: String, domain: String) = {
      user +"@"+ domain
   }

   // The extraction method (mandatory)
   def unapply(str: String): Option[(String, String)] = {
      val parts = str split "@"

      if (parts.length == 2){
         Some(parts(0), parts(1)) 
      } else {
         None
      }
   }
}

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

D:\>scalac Demo.scala
D:\>scala Demo
Apply method : Maxsu@gmail.com
Unapply method : Some((Maxsu,gmail.com))
Unapply method : None

抽取器模式匹配

當(dāng)一個類的實例后跟括號為零個或多個參數(shù)的列表時,編譯器會調(diào)用該實例上的apply方法。 可以在對象和類中定義apply方法。

如上所述,unapply方法的目的是提取正在尋找的特定值。當(dāng)使用match語句比較提取器對象時,將自動執(zhí)行unapply方法。

嘗試以下示例程序 -

object Demo {
   def main(args: Array[String]) {
      val x = Demo(5)
      println(x)

      x match {
         case Demo(num) => println(x+" is bigger two times than "+num)

         //unapply is invoked
         case _ => println("i cannot calculate")
      }
   }
   def apply(x: Int) = x*2
   def unapply(z: Int): Option[Int] = if (z%2==0) Some(z/2) else None
}

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

D:\>scalac Demo.scala
D:\>scala Demo
10
10 is bigger two times than 5