Latest web development tutorials

Scala extracteur (extracteur)

Extractor est configuré pour extraire les paramètres de l'objet qui lui est passé de l'objet.

Scala bibliothèque standard contient un certain nombre d'extracteur prédéfini, nous allons examiner les grossièrement.

Scala est un procédé d'extraction de l'objet avec un unapply de. méthode unapply considérée appliquer des méthodes inverses: accepte unapply un objet et d'extraire les valeurs de l'objet, la valeur de la valeur extraite est habituellement utilisée pour construire l'objet.

L'exemple suivant montre l'adresse mail d'objet d'extraction:

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
      }
   }
}

Mise en œuvre du code ci-dessus, la sortie est:

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

L'objet ci - dessus définit deuxméthodes: appliquer et méthodes les exclure.On n'a pas besoin d'appliquer la méthode en utilisant le nouvel opérateur pour créer des objets. Ainsi, vous pouvez construire une chaîne "[email protected]" par la déclaration de test ( "Zara", "gmail.com").

méthode unapply considérée appliquer des méthodes inverses: accepte unapply un objet et d'extraire les valeurs de l'objet, la valeur de la valeur extraite est habituellement utilisée pour construire l'objet. Des exemples de la méthode que nous utilisons pour extraire le nom d'utilisateur et adresses e-mail unapply suffixe de l'objet.

La méthode unapply retourne None Adresse e-mail entrant à la place d'une instance de chaîne. Le code suivant illustre:

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

Utilise motif extraction correspondant

Lorsque nous instancier une classe, vous pouvez prendre zéro ou plusieurs paramètres, le compilateur est invoqué lorsqu'une instance de la méthode applicable. Nous pouvons définir et appliquer la méthode dans l'objet de classe.

Comme nous l'avons mentionné précédemment, unapply utilisé pour extraire la valeur que nous spécifions à trouver, au contraire, il applique l'opération. Lorsque nous utilisons les instructions de correspondance dans l'objet d'extraction est, unapply sera effectuée automatiquement, comme suit:

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
}

Mise en œuvre du code ci-dessus, la sortie est:

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