Latest web development tutorials

Scala Extraktor (Extractor)

Extraktor ist so konfiguriert, um die Parameter des Objektes, um es von dem Objekt übergeben zu extrahieren.

Scala-Standardbibliothek eine Reihe vordefinierter Extraktor enthält, werden wir in etwa auf sie schauen.

Scala ist ein Objekt-Extraktionsverfahren mit einem Unapply von. Unapply Methode angesehen Anwendung von Methoden umkehren: Unapply akzeptiert ein Objekt und Extraktwerte aus dem Objekt, wird der Wert des extrahierten Wert in der Regel verwendet, um das Objekt zu konstruieren.

Das folgende Beispiel zeigt die Extraktion Objekt Mail-Adresse:

object Test {
   def main(args: Array[String]) {
      
      println ("Apply 方法 : " + apply("Zara", "gmail.com"));
      println ("Unapply 方法 : " + unapply("[email protected]"));
      println ("Unapply 方法 : " + unapply("Zara Ali"));

   }
   // 注入方法 (可选)
   def apply(user: String, domain: String) = {
      user +"@"+ domain
   }

   // 提取方法(必选)
   def unapply(str: String): Option[(String, String)] = {
      val parts = str split "@"
      if (parts.length == 2){
         Some(parts(0), parts(1)) 
      }else{
         None
      }
   }
}

Die Umsetzung des obigen Codes ist die Ausgabe:

$ scalac Test.scala 
$ scala Test
Apply 方法 : [email protected]
Unapply 方法 : Some((Zara,gmail.com))
Unapply 方法 : None

Die obige Aufgabe definiert zweiMethoden: anwenden und UnapplyMethoden. Wir brauchen nicht die Methode anwenden, indem Sie den neuen Operator-Objekte zu erstellen. So können Sie eine Zeichenfolge "[email protected]" durch die Aussage Test ( "Zara", "gmail.com") konstruieren.

Unapply Methode angesehen Anwendung von Methoden umkehren: Unapply akzeptiert ein Objekt und Extraktwerte aus dem Objekt, wird der Wert des extrahierten Wert in der Regel verwendet, um das Objekt zu konstruieren. Beispiele für das Verfahren verwenden wir Suffix Unapply Benutzernamen und E-Mail-Adressen aus dem Objekt zu extrahieren.

Die Unapply Methode gibt keine in eingehenden E-Mail-Adresse anstelle eines String-Instanz. Der folgende Code zeigt:

unapply("[email protected]") 相等于 Some("Zara", "gmail.com")
unapply("Zara Ali") 相等于 None

Verwendet Pattern-Matching-Extraktion

Wenn wir eine Klasse instanziiert, können Sie keine oder mehrere Parameter übernehmen, wird der Compiler aufgerufen, wenn eine Instanz des Verfahrens beantragen. Wir können das Verfahren in das Klassenobjekt definieren und anzuwenden.

Wie wir bereits erwähnt, Unapply verwendet, um den Wert zu extrahieren wir Operation angeben zu finden, es gelten im Gegenteil. Wenn wir die Spiel-Anweisungen in der Extraktion Objekt verwenden, wird Unapply automatisch durchgeführt werden, wie folgt:

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

      x match
      {
         case Test(num) => println(x + " 是 " + num + " 的两倍!")
         //unapply 被调用
         case _ => println("无法计算")
      }

   }
   def apply(x: Int) = x*2
   def unapply(z: Int): Option[Int] = if (z%2==0) Some(z/2) else None
}

Die Umsetzung des obigen Codes ist die Ausgabe:

$ scalac Test.scala 
$ scala Test
10
10 是 5 的两倍!