Teilen über


Bezugszellen

Referenzzellen sind Speicherorte, mit denen Sie veränderbare Werte mit Referenzsemantik erstellen können.

Syntax

ref expression

Bemerkungen

Sie verwenden die ref Funktion, um eine neue Bezugszelle mit einem Anfangswert zu erstellen. Sie können dann den zugrunde liegenden Wert ändern, da er änderbar ist. Eine Bezugszelle enthält einen tatsächlichen Wert; es ist nicht nur eine Adresse.

Im folgenden Codebeispiel wird die Deklaration und Verwendung von Referenzzellen veranschaulicht.

let xRef = ref 10

printfn "%d" xRef.Value

xRef.Value <- 11

printfn "%d" xRef.Value

Die Ausgabe lautet wie folgt.

10
11

Referenzzellen sind Instanzen des Ref generischen Datensatztyps, der wie folgt deklariert wird.

type Ref<'a> =
    { mutable contents: 'a }

Der Typ 'a ref ist ein Synonym für Ref<'a>. Der Compiler und IntelliSense in der IDE zeigen den früheren für diesen Typ an, die zugrunde liegende Definition ist jedoch letztere.

Der ref Operator erstellt eine neue Bezugszelle. Der folgende Code ist die Deklaration des ref Operators.

let ref x = { contents = x }

In der folgenden Tabelle sind die Features aufgeführt, die in der Referenzzelle verfügbar sind.

Operator, Element oder Feld BESCHREIBUNG Typ Definition
ref (Operator) Kapselt einen Wert in eine neue Bezugszelle. 'a -> 'a ref let ref x = { contents = x }
Value (Eigenschaft) Dient zum Abrufen oder Festlegen des zugrunde liegenden Werts. unit -> 'a member x.Value = x.contents

C#-Programmierer sollten wissen, dass ref in C# nicht dasselbe ist wie ref in F#. Die äquivalenten Konstrukte in F# sind Byrefs, bei denen es sich um ein anderes Konzept als Bezugszellen handelt.

Werte, die als mutable gekennzeichnet sind, können automatisch heraufgestuft 'a ref werden, wenn sie durch eine Schließung erfasst werden; siehe "Werte".

Veraltete Konstrukte

Seit F# 6.0 sind die folgenden Operatoren veraltet, und ihre Verwendung gibt Informationswarnungen:

Operator, Element oder Feld BESCHREIBUNG Typ Definition
! (dereference-Operator, veraltet) Gibt den zugrunde liegenden Wert zurück. 'a ref -> 'a let (!) r = r.contents
:= (Zuordnungsoperator, veraltet) Ändert den zugrunde liegenden Wert. 'a ref -> 'a -> unit let (:=) r x = r.contents <- x
contents (Datensatzfeld) Dient zum Abrufen oder Festlegen des zugrunde liegenden Werts. 'a let ref x = { contents = x }

Stattdessen wird die direkte Verwendung .Value bevorzugt; siehe F# RFC FS-1111.

Das Feld contents wird zur Kompatibilität mit anderen Versionen von ML bereitgestellt und erzeugt während der Kompilierung eine Warnung. Verwenden Sie die --mlcompatibility Compileroption, um die Warnung zu deaktivieren. Weitere Informationen finden Sie unter Compileroptionen.

Siehe auch