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

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

Scala提取器

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

示例

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

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

語(yǔ)法

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

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

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)一個(gè)類的實(shí)例后跟括號(hào)為零個(gè)或多個(gè)參數(shù)的列表時(shí),編譯器會(huì)調(diào)用該實(shí)例上的apply方法。 可以在對(duì)象和類中定義apply方法。

如上所述,unapply方法的目的是提取正在尋找的特定值。當(dāng)使用match語(yǔ)句比較提取器對(duì)象時(shí),將自動(dòng)執(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