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.