Aracılığıyla paylaş


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, temel alınan değeri değişebilir olduğundan değiştirebilirsiniz. Başvuru hücresi gerçek bir değer barındırıyor; bu sadece bir adres değil.

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

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. IDE'deki derleyici ve IntelliSense bu tür için öncekini görüntüler, ancak temel alınan tanım ikincidir.

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 tabloda, başvuru hücresinde kullanılabilen özellikler gösterilmektedir.

İşleç, üye veya alan Açıklama Türü Tanım
ref (işleç) Bir değeri yeni bir başvuru hücresinde kapsüller. 'a -> 'a ref let ref x = { contents = x }
Value (özellik) Temel alınan 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ışı) Temel alınan değeri döndürür. 'a ref -> 'a let (!) r = r.contents
:= (atama işleci, kullanım dışı) Temel alınan değeri değiştirir. 'a ref -> 'a -> unit let (:=) r x = r.contents <- x
contents (kayıt alanı) Temel alınan 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 bakınız