Sel Referensi
Sel Referensi merupakan lokasi penyimpanan yang memungkinkan Anda membuat nilai yang dapat diubah dengan semantik referensi.
Sintaks
ref expression
Keterangan
Anda menggunakan ref
fungsi untuk membuat sel referensi baru dengan nilai awal. Anda kemudian dapat mengubah nilai yang mendasar karena nilai tersebut dapat diubah. Sel referensi menyimpan nilai aktual; ia bukan sekadar alamat.
Contoh kode berikut menunjukkan deklarasi dan penggunaan sel referensi.
let xRef = ref 10
printfn "%d" xRef.Value
xRef.Value <- 11
printfn "%d" xRef.Value
Outputnya sebagai berikut.
10
11
Sel referensi adalah instans dari jenis rekaman generik Ref
, yang dinyatakan seperti berikut.
type Ref<'a> =
{ mutable contents: 'a }
Jenis 'a ref
merupakan sinonim untuk Ref<'a>
. Kompilator dan IntelliSense dalam IDE menampilkan yang pertama untuk jenis ini, tetapi definisi yang mendasar adalah yang terakhir.
Operator ref
membuat sel referensi baru. Kode berikut adalah deklarasi operator ref
.
let ref x = { contents = x }
Tabel berikut ini memperlihatkan fitur yang tersedia di sel referensi.
Operator, anggota, atau bidang | Deskripsi | Jenis | Definisi |
---|---|---|---|
ref (Operator) |
Melakukan enkapsulasi nilai ke dalam sel referensi baru. | 'a -> 'a ref |
let ref x = { contents = x } |
Value (properti) |
Mendapatkan atau menetapkan nilai yang mendasar. | unit -> 'a |
member x.Value = x.contents |
Programmer C# harus memahami bahwa ref
dalam C# bukan hal yang sama seperti ref
di F#. Konstruksi yang setara dalam F# adalah byrefs, yang merupakan konsep yang berbeda dengan sel referensi.
Nilai yang ditandai sebagai mutable
dapat dipromosikan 'a ref
secara otomatis jika diambil oleh penutupan; lihat Nilai.
Konstruksi yang tidak digunakan lagi
Karena F# 6.0, operator berikut tidak digunakan lagi dan penggunaannya memberikan peringatan informasi:
Operator, anggota, atau bidang | Deskripsi | Jenis | Definisi |
---|---|---|---|
! (operator dereferensi, tidak digunakan lagi) |
Mengembalikan nilai yang mendasar. | 'a ref -> 'a |
let (!) r = r.contents |
:= (operator penugasan, tidak digunakan lagi) |
Mengubah nilai yang mendasar. | 'a ref -> 'a -> unit |
let (:=) r x = r.contents <- x |
contents (bidang rekaman) |
Mendapatkan atau menetapkan nilai yang mendasar. | 'a |
let ref x = { contents = x } |
Sebaliknya, penggunaan .Value
langsung lebih disukai; lihat F# RFC FS-1111.
Bidang contents
disediakan untuk kompatibilitas dengan versi ML lain dan akan menghasilkan peringatan selama kompilasi. Untuk menonaktifkan peringatan, gunakan opsi kompilator --mlcompatibility
. Untuk informasi selengkapnya, lihat Opsi Kompilator.