Wann sollte ich lassen, Mitglied val und Mitglied diese.?
F# hat viele verschiedene Möglichkeiten, Variablen zu definieren/Mitglieder-Typen. Wann sollte ich let
, member val
und member this.
in F# und was ist der Unterschied zwischen Ihnen? Wie zu statischen und veränderlichen Mitglieder?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Antwort von @meziantou gibt bereits einen guten überblick über die Möglichkeiten (und wie Sie sich anders Verhalten), so lassen Sie mich nur eine kurze Inhaltsangabe, oder eine Liste von Empfehlungen:
Verwenden
let
oderlet mutable
wenn Sie wollen, definieren Sie einen lokalen Wert, der sichtbar nur innerhalb der Art (im wesentlichen einprivate
Feld oder einprivate
- Funktion). In einem Modul auf top-Niveau, diese sind öffentlich zugänglich und einmal ausgewertet.let mutable
auf Modul-Ebene-erstellt eine einzige beschreibbare Bereich mit keine Rückendeckung Wert.Können Sie
val
zum erstellen einer auto-Eigenschaft, es ist die Abkürzung fürmember val Foo = .. with get
. Ab F# dies ist als ein Feld, aber es ist intern umgesetzt, wie ein get-Eigenschaft mit einem Feld sichern, um zu verhindern, dass mutation.Können Sie
val mutable
zu definieren, einen öffentlichen Bereich, aber ich würde nicht empfehlen dies, es sei denn, Sie wirklich brauchen einen öffentlichen Bereich (z.B. einige .NET-Bibliothek kann verlangen, Typen mit dieser Struktur).Mit
member x.Foo = ...
ist der beste Weg, zu setzen (nur Lesen) Status aus ein Typ. Die meisten F# - Typen sind unveränderlich, so ist dies vielleicht der am meisten common public member. Es ist die Kurzform für eine nur get-instance-Eigenschaft.Mit
member x.Foo with get() = .. and set(value) ...
ist nützlich, wenn Sie erstellen müssen eine get - /set-Eigenschaft mit Ihren eigenen benutzerdefinierten code in der gettor und settor. Dies ist manchmal nützlich, wenn Sie erstellen ein veränderliches Objekt.Mit
member val Foo = ... with get, set
ist im Grunde dasselbe wie automatisch implementierte Eigenschaften in C#. Dies ist nützlich, wenn Sie eine veränderliche Eigenschaft eine getter-und setter, die gerade liest/schreibt ein veränderliches Feld sichern.Mit
static let
auf eine Art erstellt eine statische (Klassen-Ebene) nur-Lesen-Feld, das intern erzeugt eine property mit einem Feld sichern. Verwendenstatic mutable let ...
für ein Lesen/schreiben der statischen Feld ohne Feld sichern.Mit
static val mutable private
erstellt eine statische lese - /schreib-auto-Eigenschaft mit einem Feld sichern, es kann nicht öffentlich sein.Fand ich heraus, leichter zu dekompilieren, was passiert, also:
ist eigentlich die folgende:
Dieses Beispiel erklärt den Unterschied zwischen Syntax:
val mutable
undmember val … with get, set
? Es ist wieint x;
vsint x { get; set; }
in C#?val
erstellen Sie ein Feld,member val
eine Eigenschaft erstellen.