Scala Option

Scala 集合Scala Collections

Der Scala-Option-Typ wird verwendet, um anzugeben, dass ein Wert optional ist (einen Wert hat oder keinen Wert hat).

Option[T] ist ein Container für einen optionalen Wert vom Typ T: Wenn der Wert existiert, ist Option[T] ein Some[T]; wenn er nicht existiert, ist Option[T] das Objekt None.

Als Nächstes sehen wir uns ein Stück Code an:

// Obwohl Scala es erlaubt, Variablentypen wegzulassen, werde ich der Klarheit halber
// sie explizit definieren
 
val myMap: Map[String, String] = Map("key1" -> "value")
val value1: Option[String] = myMap.get("key1")
val value2: Option[String] = myMap.get("key2")
 
println(value1) // Some("value1")
println(value2) // None

Im obigen Code ist myMap eine Hash-Map, deren Schlüsseltyp String und deren Werttyp String ist, aber der Unterschied besteht darin, dass ihr get() einen Typ namens Option[String] zurückgibt.

Scala verwendet Option[String], um dir zu sagen: "Ich werde einen Weg finden, einen String zurückzugeben, aber möglicherweise gibt es keinen String für dich."

myMap enthält die key2-Daten nicht, daher gibt die Methode get() None zurück.

Option hat zwei Unterkategorien, eine ist Some und die andere None. Wenn es Some zurückgibt, bedeutet das, dass die Funktion dir erfolgreich einen String zurückgegeben hat, und du kannst diesen String über die get()-Funktion erhalten. Wenn es None zurückgibt, bedeutet das, dass es keinen String für dich gibt.

Ein weiteres Beispiel:

Beispiel

object Test {
   def main(args: Array[String]) {
      val sites = Map("example" -> "www.example.com", "google" -> "www.google.com")
     
      println("sites.get( \"example\" ) : " + sites.get( "example" )) // Some(www.example.com)
      println("sites.get( \"baidu\" ) : " + sites.get( "baidu" ))  // None
   }
}

Das Ausführen des obigen Codes erzeugt die folgende Ausgabe:

$ scalac Test.scala 
$ scala Test
sites.get( "example" ) : Some(www.example.com)
sites.get( "baidu" ) : None

Du kannst auch Musterabgleich verwenden, um den übereinstimmenden Wert auszugeben. Beispiel:

Beispiel

object Test {
   def main(args: Array[String]) {
      val sites = Map("example" -> "www.example.com", "google" -> "www.google.com")
     
      println("show(sites.get( \"example\")) : " +  
                                          show(sites.get( "example")) )
      println("show(sites.get( \"baidu\")) : " +  
                                          show(sites.get( "baidu")) )
   }
   
   def show(x: Option[String]) = x match {
      case Some(s) => s
      case None => "?"
   }
}

Das Ausführen des obigen Codes erzeugt die folgende Ausgabe:

$ scalac Test.scala 
$ scala Test
show(sites.get( "example")) : www.example.com
show(sites.get( "baidu")) : ?

getOrElse()-Methode

Sie können die Methode getOrElse() verwenden, um ein Element abzurufen, das im Tupel vorhanden ist, oder um dessen Standardwert zu verwenden. Beispiel:

Beispiel

object Test {
   def main(args: Array[String]) {
      val a:Option[Int] = Some(5)
      val b:Option[Int] = None
     
      println("a.getOrElse(0): " + a.getOrElse(0) )
      println("b.getOrElse(10): " + b.getOrElse(10) )
   }
}

Das Ausführen des obigen Codes erzeugt die folgende Ausgabe:

$ scalac Test.scala 
$ scala Test
a.getOrElse(0): 5
b.getOrElse(10): 10

isEmpty()-Methode

Sie können die Methode isEmpty() verwenden, um zu prüfen, ob das Element im Tupel None ist. Beispiel:

Beispiel

object Test {
   def main(args: Array[String]) {
      val a:Option[Int] = Some(5)
      val b:Option[Int] = None
     
      println("a.isEmpty: " + a.isEmpty )
      println("b.isEmpty: " + b.isEmpty )
   }
}

Das Ausführen des obigen Codes erzeugt die folgende Ausgabe:

$ scalac Test.scala 
$ scala Test
a.isEmpty: false
b.isEmpty: true

Häufig verwendete Methoden von Scala Option

Die folgende Tabelle listet die häufig verwendeten Methoden von Scala Option auf:

Nein. Methode und Beschreibung
1

def get: A

Ruft den optionalen Wert ab.

2

def isEmpty: Boolean

Prüft, ob der optionale Wert None ist; gibt true zurück, wenn ja, andernfalls false.

3

def productArity: Int

Gibt die Anzahl der Elemente zurück. Für A(x_1, ..., x_k) wird k zurückgegeben.

4

def productElement(n: Int): Any

Ruft den angegebenen optionalen Wert ab, beginnend bei 0. Das heißt, für A(x_1, ..., x_k) wird x_(n+1) zurückgegeben, wobei 0 < n < k.

5

def exists(p: (A) => Boolean): Boolean

Wenn ein Element im optionalen Wert, das die angegebene Bedingung erfüllt, existiert und nicht None ist, wird true zurückgegeben; andernfalls wird false zurückgegeben.

6

def filter(p: (A) => Boolean): Option[A]

Wenn die Option einen Wert enthält und die an filter übergebene Bedingungsfunktion true zurückgibt, gibt filter eine Some-Instanz zurück. Andernfalls ist der Rückgabewert None.

7

def filterNot(p: (A) => Boolean): Option[A]

Wenn die Option einen Wert enthält und die an filter übergebene Bedingungsfunktion false zurückgibt, gibt filter eine Some-Instanz zurück. Andernfalls ist der Rückgabewert None.

8

def flatMap[B](f: (A) => Option[B]): Option[B]

Wenn die Option einen Wert enthält, gib das Ergebnis zurück, nachdem er an die Funktion f übergeben wurde; andernfalls gib None zurück.

9

def foreach[U](f: (A) => U): Unit

Wenn die Option einen Wert enthält, übergib jeden Wert an die Funktion f; andernfalls tue nichts.

10

def getOrElse[B >: A](default: => B): B

Wenn die Option einen Wert enthält, gib den Optionswert zurück; andernfalls gib den festgelegten Standardwert zurück.

11

def isDefined: Boolean

Gib true zurück, wenn der optionale Wert eine Instanz von Some ist; andernfalls gib false zurück.

12

def iterator: Iterator[A]

Wenn die Option einen Wert enthält, iteriere über den optionalen Wert. Wenn der optionale Wert leer ist, gib einen leeren Iterator zurück.

13

def map[B](f: (A) => B): Option[B]

Wenn die Option einen Wert enthält, wird ein durch die Funktion f verarbeitetes Some zurückgegeben; andernfalls wird None zurückgegeben.

14

def orElse[B >: A](alternative: => Option[B]): Option[B]

Wenn eine Option None ist, gibt die Methode orElse den Wert des By-Name-Parameters zurück; andernfalls gibt sie diese Option direkt zurück.

15

def orNull

Gibt den Optionswert zurück, wenn die Option einen Wert enthält; andernfalls wird null zurückgegeben.

Scala 集合Scala Collections

Andere Erweiterungen