Başvuru Hücreleri

Başvuru hücreleri, başvuru semantiğiyle değişebilir değerler oluşturmanıza olanak sağlayan depolama konumlarıdır.

Syntax

ref expression

Açıklamalar

Değeri ref kapsülleye yeni bir başvuru hücresi oluşturmak için bir değerden önce işleci kullanırsiniz. Ardından, temeldeki değer değişebilir olduğundan değiştirebilirsiniz.

Başvuru hücresi gerçek bir değer taşır; yalnızca adres değildir. işlecini kullanarak bir başvuru hücresi sanız, temel alınan değerin bir kopyasını kapsüllü ref table değeri olarak oluşturun.

Başvuru hücresine başvuru için ! (patlama) işleci kullanarak başvuru hücresine başvuru başvurusunda bulundurarak başvuru hücresine başvur

Aşağıdaki kod örneği başvuru hücrelerinin bildirim ve kullanımını göstermektedir.

// Declare a reference.
let refVar = ref 6

// Change the value referred to by the reference.
refVar := 50

// Dereference by using the ! operator.
printfn "%d" !refVar

Çıktı 50 olur.

Başvuru hücreleri, aşağıdaki Ref gibi bildirilen genel kayıt türünün örnekleridir.

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

türü, 'a ref için bir eş anlamlıdır. Ref<'a> Derleyici ve IDE içindeki IntelliSense, bu tür için ilkini görüntüler fakat temeldeki tanım ikincisidir.

işleci ref yeni bir başvuru hücresi oluşturur. Aşağıdaki kod, işlecinin ref bildirimidir.

let ref x = { contents = x }

Aşağıdaki tablo başvuru hücresindeki mevcut özellikleri göstermektedir.

İşleç, üye veya alan Açıklama Tür Tanım
! (başvuru işleci) Temeldeki değeri döndürür. 'a ref -> 'a let (!) r = r.contents
:= (atama işleci) Temeldeki değeri değiştirir. 'a ref -> 'a -> unit let (:=) r x = r.contents <- x
ref (işleç) Yeni bir başvuru hücresine bir değer kapsüller. 'a -> 'a ref let ref x = { contents = x }
Value (özellik) Temeldeki değeri alır veya ayarlar. unit -> 'a member x.Value = x.contents
contents (kayıt alanı) Temeldeki değeri alır veya ayarlar. 'a let ref x = { contents = x }

Temeldeki değere erişmek için çeşitli yollar vardır. Başvuru işleci ( ) tarafından döndürülen değer ! atanabilir bir değer değildir. Bu nedenle, temel alınan değeri değiştirirken bunun yerine atama işleci ( := ) kullansanız gerekir.

Hem Value özellik hem de contents alan atanabilir değerlerdir. Bu nedenle, bunları temeldeki değere ulaşmak ya da onu değiştirmek için aşağıdaki kodda gösterildiği gibi kullanabilirsiniz.

let xRef : int ref = ref 10

printfn "%d" (xRef.Value)
printfn "%d" (xRef.contents)

xRef.Value <- 11
printfn "%d" (xRef.Value)
xRef.contents <- 12
printfn "%d" (xRef.contents)

Çıktı aşağıdaki gibidir:

10
10
11
12

alanı, contents diğer sürümlerle uyumluluk için sağlanır ML derleme sırasında bir uyarı üretir. Uyarıyı devre dışı bırakmak için derleyici --mlcompatibility seçeneğini kullanın. Daha fazla bilgi için bkz. Derleyici Seçenekleri.

C# programcıları, ref C# içinde F# ile aynı şey ref olmadığını bilmektedir. F# içinde eşdeğer yapılar, başvuru hücrelerindenfarklı bir kavram olan byrefs'tir.

Olarak işaretlenen mutable değerler, kapanış tarafından 'a ref yakalanıyorsa otomatik olarak olarak yükseltilir; bkz. Değerler.

Ayrıca bkz.