Ich habe den Blogbeitrag gelesen, der mir empfohlen wurde hier . Jetzt frage ich mich, wofür einige dieser Methoden nützlich sind. Können Sie Beispiele zur Verwendung von forall
(im Gegensatz zu foreach
) und toList
von Option
?
Ich habe ein praktisches Beispiel für toList
Methode. Sie finden es in scaldi (mein Scala-Abhängigkeits-Injection-Framework) in Module.scala in Zeile 72:
In diesem Zusammenhang kann die Methode getBindings
entweder Nil
oder List
mit nur einem Element ausgeben. Ich kann es als Option
mit discoverBinding
abrufen. Ich finde es bequem, Option
in List
(das entweder leer ist oder ein Element hat) mit toList
method zu konvertieren.
map
: Erlaubt es Ihnen, einen Wert "inside" in Option
zu transformieren, wie Sie wahrscheinlich bereits für List
s wissen. Diese Operation macht Option
zu einem Funktor (du kannst "endofunctor" sagen, wenn du deine Kollegen erschrecken willst) flatMap
: Option
ist eigentlich eine Monade und flatMap
macht sie eins (zusammen mit etwas wie einem Konstruktor für einen einzelnen Wert). Diese Methode kann verwendet werden, wenn Sie eine Funktion haben, die einen Wert in Option
umwandelt, aber der Wert, den Sie haben, bereits in ein Option
"eingepackt" ist, so dass flatMap
Ihnen das Auspacken vor dem Anwenden der Funktion erspart. Z.B. Wenn Sie Option[Map[K,V]]
haben, können Sie mapOption.flatMap(_.get(key))
schreiben. Wenn Sie hier ein einfaches map
verwenden, erhalten Sie Option[Option[V]]
, aber mit flatMap
erhalten Sie Option[V]
. Diese Methode ist cooler, als Sie vielleicht denken, da sie es erlaubt, Funktionen sehr flexibel miteinander zu ketten (was ein Grund ist, warum Haskell Monaden liebt). flatten
: Wenn Sie einen Wert vom Typ Option[Option[T]]
haben, verwandelt flatten
ihn in Option[T]
. Es ist das gleiche wie flatMap(identity(_))
. orElse
: Wenn Sie mehrere Alternativen in Option
s eingeschlossen haben und Sie möchten, dass die erste einen Wert enthält, können Sie diese Alternativen mit orElse
verknüpfen: steakOption.orElse(hamburgerOption).orElse(saladOption)
getOrElse
: Holen Sie den Wert aus Option
, geben Sie aber einen Standardwert an, wenn dieser leer ist, z. %Code%. nameOption.getOrElse("unknown")
: Tue etwas mit dem Wert drinnen, falls es existiert. foreach
, isDefined
: Bestimmen Sie, ob diese isEmpty
einen Wert enthält. Option
, forall
: Prüft, ob ein bestimmtes Prädikat für den Wert gilt. exists
ist identisch mit forall
, option.map(test(_)).getOrElse(true)
ist identisch, nur mit exists
als Standard. false
: Überraschung, konvertiert toList
in Option
. Viele der Methoden von Option können eher der Einheitlichkeit (mit Sammlungen) wegen ihrer Nützlichkeit dienen, da sie alle sehr kleine Funktionen sind und daher nicht viel Mühe ersparen, aber sie dienen einem Zweck, und Ihre Bedeutung wird deutlich, sobald Sie mit dem Sammlungsframework vertraut sind (wie oft gesagt wird, ist Option wie eine Liste, die nicht mehr als ein Element haben kann).
forall prüft eine Eigenschaft des Werts innerhalb einer Option. Wenn kein Wert vorhanden ist, wird der Check bestanden. Zum Beispiel, wenn Sie in einer Autovermietung nur 1 additionalDriver: Option[Person]
haben, können Sie
genau das gleiche, was Sie tun würden, wenn mehrere zusätzliche Treiber erlaubt wären und Sie eine Liste hätten.
toList kann eine nützliche Konvertierung sein. Angenommen, Sie haben Optionen: Listen Sie [Option [T]] auf, und Sie möchten eine Liste [T] mit den Werten aller Optionen erhalten, die Einige sind. Sie können
tun %Vor% (oder besser options.flatMap(_.toList)
)
Tags und Links scala scala-option