Scala Option
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:
// 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
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
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
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
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 Collections