Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A referenciacellák olyan tárolóhelyek, amelyek lehetővé teszik a referencia szemantikával rendelkező, mutable értékek létrehozását.
Szemantika
ref expression
Megjegyzések
A függvény használatával ref létrehoz egy új referenciacellát egy kezdeti értékkel. Ezután módosíthatja a mögöttes értéket, mert az nem módosítható. A referenciacellák tényleges értéket tárolnak; ez nem csak egy cím.
Az alábbi példakód a referenciacellák deklarálását és használatát szemlélteti.
let xRef = ref 10
printfn "%d" xRef.Value
xRef.Value <- 11
printfn "%d" xRef.Value
A kimenet a következő.
10
11
A referenciacellák az Ref általános rekordtípus példányai, amelyeket a következőképpen deklarálunk.
type Ref<'a> =
{ mutable contents: 'a }
A típus 'a ref a szinonimája.Ref<'a> A fordító és az IntelliSense az IDE-ben az előbbit jeleníti meg ehhez a típushoz, de a mögöttes definíció az utóbbi.
Az ref operátor létrehoz egy új referenciacellát. Az alábbi kód az operátor deklarációja ref .
let ref x = { contents = x }
Az alábbi táblázat a referenciacellában elérhető funkciókat mutatja be.
| Operátor, tag vagy mező | Leírás | Típus | Definíció |
|---|---|---|---|
ref (operátor) |
Egy érték beágyazása egy új referenciacellába. | 'a -> 'a ref |
let ref x = { contents = x } |
Value (tulajdonság) |
Lekéri vagy beállítja a mögöttes értéket. | unit -> 'a |
member x.Value = x.contents |
A C#-programozóknak tudniuk kell, hogy ref a C#-ban nem ugyanaz, mint ref az F#-ban. Az F# megfelelő szerkezetei byrefsek, amelyek eltérnek a referenciacelláktól.
A lezárás által rögzített mutable értékek automatikusan előléptethetők 'a ref , lásd : Értékek.
Elavult szerkezetek
Az F# 6.0 óta a következő operátorok elavultak, és használatuk tájékoztató figyelmeztetéseket ad:
| Operátor, tag vagy mező | Leírás | Típus | Definíció |
|---|---|---|---|
! (elévülési operátor, elavult) |
A mögöttes értéket adja vissza. | 'a ref -> 'a |
let (!) r = r.contents |
:= (hozzárendelés-operátor, elavult) |
Módosítja a mögöttes értéket. | 'a ref -> 'a -> unit |
let (:=) r x = r.contents <- x |
contents (rekordmező) |
Lekéri vagy beállítja a mögöttes értéket. | 'a |
let ref x = { contents = x } |
Ehelyett előnyben részesítik a közvetlen használatot .Value ; lásd: F# RFC FS-1111.
A mező contents az ML más verzióival való kompatibilitás érdekében van megadva, és a fordítás során figyelmeztetést fog eredményezni. A figyelmeztetés letiltásához használja a --mlcompatibility fordítót. További információ: Fordító beállításai.