44 Stimmen

F# Schlüsselwort 'Some'

F# Schlüsselwort 'Some' - was bedeutet das?

52voto

mmx Punkte 400975

Some ist kein Schlüsselwort. Es gibt jedoch einen option Typ, der eine diskriminierte Union enthält, die zwei Dinge enthält:

  1. Some, das einen Wert eines bestimmten Typs enthält.
  2. 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()

8voto

Brian Punkte 115257

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.

7voto

Alex Mapley Punkte 612

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 ...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X