Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Referenční buňky jsou umístění úložiště, která umožňují vytvářet proměnlivé hodnoty s referenční sémantikou.
Syntaxe
ref expression
Poznámky
Pomocí ref funkce vytvoříte novou odkazovou buňku s počáteční hodnotou. Potom můžete změnit podkladovou hodnotu, protože je proměnlivá. Referenční buňka obsahuje skutečnou hodnotu; není to jen adresa.
Následující příklad kódu znázorňuje deklaraci a použití referenčních buněk.
let xRef = ref 10
printfn "%d" xRef.Value
xRef.Value <- 11
printfn "%d" xRef.Value
Výstup je následující.
10
11
Odkazové buňky jsou instance obecného typu záznamu Ref , který je deklarován následujícím způsobem.
type Ref<'a> =
{ mutable contents: 'a }
'a ref Typ je synonymem pro Ref<'a>. Kompilátor a IntelliSense v integrovaném vývojovém prostředí (IDE) zobrazují první pro tento typ, ale základní definice je druhá.
Operátor ref vytvoří novou odkazovou buňku. Následující kód je deklarace operátoru ref .
let ref x = { contents = x }
Následující tabulka ukazuje funkce, které jsou k dispozici v referenční buňce.
| Operátor, člen nebo pole | Popis | Typ | Definice |
|---|---|---|---|
ref (operátor) |
Zapouzdřuje hodnotu do nové odkazové buňky. | 'a -> 'a ref |
let ref x = { contents = x } |
Value (vlastnost) |
Získá nebo nastaví podkladovou hodnotu. | unit -> 'a |
member x.Value = x.contents |
Programátoři jazyka C# by měli vědět, že ref v jazyce C# není totéž jako ref v jazyce F#. Ekvivalentní konstrukce v jazyce F# jsou byrefs, což je jiný koncept než odkazové buňky.
Hodnoty označené jako mutable mohou být automaticky povýšeny na 'a ref , pokud jsou zachyceny uzavřením; viz Hodnoty.
Zastaralé konstrukce
Vzhledem k tomu, že F# 6.0 jsou následující operátory zastaralé a jejich použití poskytuje informační upozornění:
| Operátor, člen nebo pole | Popis | Typ | Definice |
|---|---|---|---|
! (operátor dereference, zastaralý) |
Vrátí podkladovou hodnotu. | 'a ref -> 'a |
let (!) r = r.contents |
:= (operátor přiřazení, zastaralý) |
Změní podkladovou hodnotu. | 'a ref -> 'a -> unit |
let (:=) r x = r.contents <- x |
contents (pole záznamu) |
Získá nebo nastaví podkladovou hodnotu. | 'a |
let ref x = { contents = x } |
Místo toho je upřednostňované přímé použití .Value . Viz F# RFC FS-1111.
Toto pole contents je poskytováno z důvodu kompatibility s jinými verzemi ML a během kompilace vygeneruje upozornění. Pokud chcete upozornění zakázat, použijte možnost kompilátoru --mlcompatibility . Další informace naleznete v tématu Možnosti kompilátoru.