F# Schlüsselwort 'Some' - was bedeutet das?
Antworten
Zu viele Anzeigen?Some
ist kein Schlüsselwort. Es gibt jedoch einen option
Typ, der eine diskriminierte Union enthält, die zwei Dinge enthält:
Some
, das einen Wert eines bestimmten Typs enthält.None
, das das Fehlen eines Werts repräsentiert.
Es ist definiert als:
type 'a option =
| None
| Some of 'a
Es verhält sich ein wenig wie ein nullable Typ, bei dem Sie ein Objekt haben möchten, das einen Wert eines bestimmten Typs halten kann oder überhaupt keinen Wert hat.
let stringRepresentationOfSomeObject (x : 'a option) =
match x with
| None -> "KEIN WERT!"
| Some(t) -> t.ToString()
Sie können Discriminated Unions in F# für weitere Informationen zu DUs im Allgemeinen und dem Option-Typ (Some, None) im Besonderen überprüfen. Wie bereits in einer früheren Antwort erwähnt, ist Some nur ein Union-Case des Option<'a>-Typs, der ein besonders häufiges/nützliches Beispiel eines algebraischen Datentyps ist.
Some
wird verwendet, um einen Options typ anzugeben, oder in anderen Worten, einen Typ, der möglicherweise vorhanden ist oder auch nicht.
F# unterscheidet sich von den meisten Sprachen darin, dass die Kontrollfluss hauptsächlich durch Pattern-Matching anstelle von traditioneller if/else Logik erfolgt.
In traditioneller if/else Logik sieht man möglicherweise so etwas wie dies:
if (isNull(x)) {
do ...
} else { //x existiert
do ...
}
Bei Pattern-Matching-Logik benötigen wir eine ähnliche Möglichkeit, bestimmten Code auszuführen, wenn ein Wert null ist, oder in F#-Syntax, None
Daher hätten wir denselben Code wie
match x with
| None -> do ...
| Some x -> do ...