Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
Les cellules de référence sont des emplacements de stockage qui vous permettent de créer des valeurs mutables avec la sémantique de référence.
Syntaxe
ref expression
Remarques
Vous utilisez la ref fonction pour créer une cellule de référence avec une valeur initiale. Vous pouvez ensuite modifier la valeur sous-jacente, car elle est mutable. Une cellule de référence contient une valeur réelle ; ce n’est pas seulement une adresse.
L’exemple de code suivant illustre la déclaration et l’utilisation de cellules de référence.
let xRef = ref 10
printfn "%d" xRef.Value
xRef.Value <- 11
printfn "%d" xRef.Value
La sortie est la suivante.
10
11
Les cellules de référence sont des instances du Ref type d’enregistrement générique, qui est déclaré comme suit.
type Ref<'a> =
{ mutable contents: 'a }
Le type 'a ref est un synonyme de Ref<'a>. Le compilateur et IntelliSense dans l’IDE affichent l’ancien pour ce type, mais la définition sous-jacente est la dernière.
L’opérateur ref crée une cellule de référence. Le code suivant est la déclaration de l’opérateur ref .
let ref x = { contents = x }
Le tableau suivant présente les fonctionnalités disponibles sur la cellule de référence.
| Opérateur, membre ou champ | Descriptif | Catégorie | Définition |
|---|---|---|---|
ref (opérateur) |
Encapsule une valeur dans une nouvelle cellule de référence. | 'a -> 'a ref |
let ref x = { contents = x } |
Value (propriété) |
Obtient ou définit la valeur sous-jacente. | unit -> 'a |
member x.Value = x.contents |
Les programmeurs C# doivent savoir qu’en ref C# n’est pas la même chose que ref dans F#. Les constructions équivalentes en F# sont des parrefs, qui sont un concept différent des cellules de référence.
Les valeurs marquées comme mutable pouvant être promues 'a ref automatiquement si elles sont capturées par une fermeture ; consultez Valeurs.
Constructions déconseillées
Étant donné que F# 6.0, les opérateurs suivants sont déconseillés et leur utilisation fournit des avertissements d’information :
| Opérateur, membre ou champ | Descriptif | Catégorie | Définition |
|---|---|---|---|
! (opérateur de déréférencement, déconseillé) |
Retourne la valeur sous-jacente. | 'a ref -> 'a |
let (!) r = r.contents |
:= (opérateur d’affectation, déconseillé) |
Modifie la valeur sous-jacente. | 'a ref -> 'a -> unit |
let (:=) r x = r.contents <- x |
contents (champ d’enregistrement) |
Obtient ou définit la valeur sous-jacente. | 'a |
let ref x = { contents = x } |
Au lieu de cela, l’utilisation directe est .Value préférée ; voir F# RFC FS-1111.
Le champ contents est fourni pour la compatibilité avec d’autres versions de ML et génère un avertissement lors de la compilation. Pour désactiver l’avertissement, utilisez l’option du --mlcompatibility compilateur. Pour plus d’informations, consultez l’article Options du compilateur.