Wie funktioniert der Optionstyp in F #?

7

Ich habe also das Expert F # Buch von Apress gelesen und es hauptsächlich als Referenz beim Aufbau einer Spielzeug-F # Bibliothek verwendet, aber es gibt eine Sache, die ich nicht verstanden habe, und das ist der "Option" -Typ / p>

Wie funktioniert es und was ist es in der realen Welt?

    
thr 08.03.2009, 19:14
quelle

6 Antworten

19

Der Optionstyp ist mindestens ähnlich zu Nullable<T> und Referenztypen in C #. Ein Wert vom Typ Option<T> ist entweder None , was bedeutet, dass es keinen eingekapselten Wert gibt, oder Some mit einem bestimmten Wert von T . Das ist genauso wie die Nullable<int> in C # ist entweder der Nullwert, oder hat eine assoziierte int - und die Art, wie ein String Wert in C # ist entweder eine Nullreferenz, oder verweist auf ein String-Objekt.

Wenn Sie einen Optionswert verwenden, geben Sie im Allgemeinen zwei Pfade an - einen für den Fall, dass für einen verknüpften Wert steht und einen für den Fall, dass nicht ist. Mit anderen Worten, dieser Code:

%Vor%

ist ähnlich wie:

%Vor%

Ich glaube, die allgemeine Idee ist, dass erzwingen Sie (na ja, fast), um den "no associated value / object" -Fall zu behandeln, macht Ihren Code robuster.

    
Jon Skeet 08.03.2009, 19:37
quelle
5

Eines der besten Beispiele für die Verwendung in der realen Welt ist das TryParse -Muster in. Netz. Siehe die erste Hälfte von

Ссылка

für eine Diskussion.

    
Brian 08.03.2009 19:45
quelle
4

Es wird verwendet, wenn eine Funktion oder Methode "vielleicht" oder "optional" einen Wert zurückgeben soll. In C # würden Sie wahrscheinlich null zurückgeben oder ein Null-Objekt oder möglicherweise Nullable für Werttypen zurückgeben.

Der Nachteil beim Zurückgeben von null (der häufigste Fall) ist, dass es nicht typsicher ist: null ist eine Instanz aller Typen, so dass Sie später in alle Arten von haarigen Nullbezugssituationen geraten.

Der Optionstyp ist ein sogenannter dislimierter Unionstyp mit zwei Konstruktoren: None und Some a. None gibt explizit an, dass Sie keinen Wert haben. Grundsätzlich ist das Null-Objekt-Muster verallgemeinert.

    
Kurt Schelfthout 08.03.2009 19:40
quelle
2

Sie verwenden es, wenn ein Wert optional ist. Eine Verwendung besteht darin, eine Art "Nullreferenz" zu haben, z.

%Vor%

Dann können Sie später x auf Einige v aktualisieren. Sie verwenden es mit der Übereinstimmungserklärung, z. B.

%Vor%     
TrayMan 08.03.2009 19:37
quelle
1

Um den anderen Antworten hinzuzufügen, ist der Optionstyp nichts besonderes - es ist nur eine weitere diskriminierte Vereinigung. Sie könnten es selbst in einer Zeile definieren:

%Vor%

Das Dienstprogramm ist, wie andere darauf hingewiesen haben, mit dem Mustervergleich sicher dekonstruieren, anstatt nach Null zu suchen oder einen Hack-Workaround zu verwenden, um anzuzeigen, ob ein Wert nicht wirklich ein Wert ist.

    
MichaelGG 09.03.2009 03:20
quelle
0

Ein funktionales Muster, das den Optionstyp verwendet:

Wenn Sie Teile einer rekursiven Datenstruktur ändern müssen, z. B. einen Baum oder eine Liste, Sie werden so viel wie möglich von der vorhandenen Datenstruktur wiederverwenden wollen. Der Optionstyp kann dir dabei helfen. Diese beiden Funktionen ersetzen alle Vorkommen der Zahl 5 durch 7, aber der erste kopiert den gesamten Baum. Die zweite nicht.

%Vor%

Es ist vielleicht nicht in allen Fällen notwendig, aber es ist eine nette Technik zu wissen.

    
Jørgen Fogh 17.05.2009 21:48
quelle

Tags und Links