Başvuru Hücreleri

Başvuru hücreleri , başvuru semantiği ile değiştirilebilir değerler oluşturmanıza olanak tanıyan depolama konumlarıdır.

Sözdizimi

ref expression

Açıklamalar

işlevini kullanarak ref ilk değere sahip yeni bir başvuru hücresi oluşturursunuz. 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.

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

let xRef = ref 10

printfn "%d" xRef.Value

xRef.Value <- 11

printfn "%d" xRef.Value

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

10
11

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

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

türü 'a ref , için Ref<'a>bir eş anlamlıdır. 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şlecin bildirimidir ref .

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
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

C# programcıları, C# dilinde F# ile aynı şey ref olmadığını bilmelidirref. F# içindeki eşdeğer yapılar, başvuru hücrelerinden farklı bir kavram olan byref'lerdir.

olarak mutable işaretlenmiş değerler, bir kapanış tarafından yakalanırsa otomatik olarak yükseltilebilir 'a ref ; bkz . Değerler.

Kullanım dışı yapılar

F# 6.0'dan bu yana aşağıdaki işleçler kullanım dışıdır ve kullanımları bilgilendirici uyarılar verir:

İşleç, üye veya alan Açıklama Tür Tanım
! (başvuru kaldırma işleci, kullanım dışı) Temeldeki değeri döndürür. 'a ref -> 'a let (!) r = r.contents
:= (atama işleci, kullanım dışı) Temeldeki değeri değiştirir. 'a ref -> 'a -> unit let (:=) r x = r.contents <- x
contents (kayıt alanı) Temeldeki değeri alır veya ayarlar. 'a let ref x = { contents = x }

Bunun yerine doğrudan kullanımı .Value tercih edilir; bkz . F# RFC FS-1111.

Alan contents , ml'nin diğer sürümleriyle uyumluluk için sağlanır ve derleme sırasında bir uyarı oluşturur. Uyarıyı devre dışı bırakmak için derleyici seçeneğini kullanın --mlcompatibility . Daha fazla bilgi için bkz . Derleyici Seçenekleri.

Ayrıca bkz.