Verwijzingscellen

Verwijzingscellen zijn opslaglocaties waarmee u veranderlijke waarden kunt maken met verwijzingssemantiek.

Syntaxis

ref expression

Opmerkingen

U gebruikt de ref functie om een nieuwe verwijzingscel met een initiƫle waarde te maken. Vervolgens kunt u de onderliggende waarde wijzigen omdat deze veranderlijk is. Een verwijzingscel bevat een werkelijke waarde; het is niet alleen een adres.

In het volgende codevoorbeeld ziet u de declaratie en het gebruik van verwijzingscellen.

let xRef = ref 10

printfn "%d" xRef.Value

xRef.Value <- 11

printfn "%d" xRef.Value

De uitvoer is als volgt.

10
11

Verwijzingscellen zijn exemplaren van het Ref algemene recordtype, dat als volgt wordt gedeclareerd.

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

Het type 'a ref is een synoniem voor Ref<'a>. De compiler en IntelliSense in de IDE geven de voormalige voor dit type weer, maar de onderliggende definitie is de laatste.

De ref operator maakt een nieuwe verwijzingscel. De volgende code is de declaratie van de ref operator.

let ref x = { contents = x }

In de volgende tabel ziet u de functies die beschikbaar zijn in de verwijzingscel.

Operator, lid of veld Beschrijving Type Definitie
ref (operator) Een waarde inkapselen in een nieuwe verwijzingscel. 'a -> 'a ref let ref x = { contents = x }
Value (eigenschap) Hiermee haalt u de onderliggende waarde op of stelt u deze in. unit -> 'a member x.Value = x.contents

C#-programmeurs moeten weten dat ref in C# niet hetzelfde is als ref in F#. De equivalente constructies in F# zijn byrefs, wat een ander concept is dan verwijzingscellen.

Waarden die als zodanig zijn gemarkeerd mutable , worden automatisch gepromoveerd naar 'a ref als ze worden vastgelegd door een sluiting. Zie Waarden.

Afgeschafte constructies

Aangezien F# 6.0 is afgeschaft, worden de volgende operators afgeschaft en geeft het gebruik informatieve waarschuwingen:

Operator, lid of veld Beschrijving Type Definitie
! (deductieoperator, afgeschaft) Retourneert de onderliggende waarde. 'a ref -> 'a let (!) r = r.contents
:= (toewijzingsoperator, afgeschaft) Hiermee wijzigt u de onderliggende waarde. 'a ref -> 'a -> unit let (:=) r x = r.contents <- x
contents (recordveld) Hiermee haalt u de onderliggende waarde op of stelt u deze in. 'a let ref x = { contents = x }

In plaats daarvan heeft het directe gebruik .Value de voorkeur; zie F# RFC FS-1111.

Het veld contents is beschikbaar voor compatibiliteit met andere versies van ML en zal tijdens de compilatie een waarschuwing opleveren. Als u de waarschuwing wilt uitschakelen, gebruikt u de --mlcompatibility compileroptie. Zie Compileropties voor meer informatie.

Zie ook