Latest web development tutorials

Scala Mustervergleich

Scala bietet eine leistungsstarke Mustermechanismus passend ist auch weit verbreitet.

Ein passendes Muster enthält eine Reihe von Alternativen, von denen jede mit einem SchlüsselwortFall beginnt.Jede enthält eine Backup-Option und ein Muster mit einer Vielzahl von Ausdrücken. Pfeilsymbol=> trennt die Muster und Ausdrücke.

Im Folgenden ist ein einfaches Muster übereinstimmen Integer-Wert Beispiel:

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

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

Die Umsetzung des obigen Codes ist die Ausgabe:

$ scalac Test.scala 
$ scala Test
many

entsprechen den entsprechenden Java in dem Schalter, aber nach dem Selektor Ausdruck geschrieben.Nämlich: Selector Spiel {Alternativen}.

Im Auftrag von Ausdrücken, den Code zu entsprechen geschrieben jeden Modus zu versuchen, die Berechnung zu beenden, wenn sie finden dort ein passender Fall ist, passend zu dem Rest der Fall wird nicht fortgesetzt.

Als nächstes schauen wir auf einen anderen Datentyp des Musterabgleich:

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

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

Die Umsetzung des obigen Codes ist die Ausgabe:

$ scalac Test.scala 
$ scala Test
2
many
one
scala.Int

Beispiele für den ersten Fall entspricht einem ganzzahligen Wert von 1, der zweite Fall auf den String-Wert von zwei entspricht, entspricht der zweite Fall auf den String-Wert von zwei, entspricht der dritte Fall der Art des Modells verwendet, um zu bestimmen, ob der Wert in ganzen vergangen Art, Nutzung isInstanceOf verglichen, um die Art zu bestimmen, ist Musterabgleich besser. Der vierte Fall zeigt die Standard-Voll Spiel Alternativen wird das Spiel nicht im anderen Spiel, einen ähnlichen Schalter in Standard gefunden.


Verwenden Sie Beispielklasse

Benutze das Stichwort Fall wird die Klassendefinition ist eine Beispielklasse (Fallklassen), ist Beispielklasse ein Sonderklasse, für die Musteranpassung optimiert.

Im Folgenden ist ein einfaches Beispiel für eine Beispielklasse:

object Test {
   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)
}

Die Umsetzung des obigen Codes ist die Ausgabe:

$ scalac Test.scala 
$ scala Test
Hi Alice!
Hi Bob!
Age: 32 year, name: Charlie?

Wenn Sie eine Klasse Beispiel erklären, tritt das folgende Verfahren automatisch:

  • Jeder Parameter Konstruktor werden immer val, sofern sie nicht ausdrücklich als var deklariert, aber das ist nicht zu empfehlen;
  • Bereitstellung von Methoden verbunden sind Objekte anwenden, so dass Sie Objekte bauen kann, kann das neue Schlüsselwort nicht verwenden;
  • Sofern Unapply Verfahren ermöglicht Musterabgleich arbeiten können;
  • Generieren Sie toString, gleich, hashCode und kopieren Methode, es sei denn, die Anzeige für diese Methoden Definitionen zeigt.