Bagikan melalui


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.

Lihat juga