Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le celle di riferimento sono posizioni di archiviazione che consentono di creare valori modificabili con semantica di riferimento.
Sintassi
ref expression
Osservazioni:
Usare la ref funzione per creare una nuova cella di riferimento con un valore iniziale. È quindi possibile modificare il valore sottostante perché è modificabile. Una cella di riferimento contiene un valore effettivo; non è solo un indirizzo.
Nell'esempio di codice seguente viene illustrata la dichiarazione e l'uso di celle di riferimento.
let xRef = ref 10
printfn "%d" xRef.Value
xRef.Value <- 11
printfn "%d" xRef.Value
L'output è indicato di seguito.
10
11
Le celle di riferimento sono istanze del Ref tipo di record generico, dichiarato come segue.
type Ref<'a> =
{ mutable contents: 'a }
Il tipo 'a ref è un sinonimo di Ref<'a>. Il compilatore e IntelliSense nell'IDE visualizzano il primo per questo tipo, ma la definizione sottostante è la seconda.
L'operatore ref crea una nuova cella di riferimento. Il codice seguente è la dichiarazione dell'operatore ref .
let ref x = { contents = x }
Nella tabella seguente vengono illustrate le funzionalità disponibili nella cella di riferimento.
| Operatore, membro o campo | Descrizione | TIPO | Definizione |
|---|---|---|---|
ref (operatore) |
Incapsula un valore in una nuova cella di riferimento. | 'a -> 'a ref |
let ref x = { contents = x } |
Value (proprietà) |
Ottiene o imposta il valore sottostante. | unit -> 'a |
member x.Value = x.contents |
I programmatori C# devono sapere che ref in C# non è la stessa cosa di ref F#. I costrutti equivalenti in F# sono byrefs, che sono un concetto diverso dalle celle di riferimento.
I valori contrassegnati come mutable possono essere promossi automaticamente a 'a ref se acquisiti da una chiusura. Vedere Valori.
Costrutti deprecati
A partire da F# 6.0, gli operatori seguenti sono deprecati e il relativo uso genera avvisi informativi:
| Operatore, membro o campo | Descrizione | TIPO | Definizione |
|---|---|---|---|
! (operatore dereference, deprecato) |
Restituisce il valore sottostante. | 'a ref -> 'a |
let (!) r = r.contents |
:= (operatore di assegnazione, deprecato) |
Modifica il valore sottostante. | 'a ref -> 'a -> unit |
let (:=) r x = r.contents <- x |
contents (campo record) |
Ottiene o imposta il valore sottostante. | 'a |
let ref x = { contents = x } |
Al contrario, l'uso diretto di .Value è preferibile. Vedere F# RFC FS-1111.
Il campo contents viene fornito per la compatibilità con altre versioni di ML e genererà un avviso durante la compilazione. Per disabilitare l'avviso, usare l'opzione del --mlcompatibility compilatore. Per altre informazioni, vedere opzioni del compilatore .