Bagikan melalui


Sel Referensi

Sel referensi adalah lokasi penyimpanan yang memungkinkan Anda membuat nilai yang dapat diubah dengan semantik referensi.

Sintaksis

ref expression

Komentar

Anda menggunakan ref fungsi untuk membuat sel referensi baru dengan nilai awal. Anda kemudian dapat mengubah nilai yang mendasar karena dapat diubah. Sel referensi menyimpan nilai aktual; itu bukan hanya alamat.

Contoh kode berikut mengilustrasikan 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 jenis Ref catatan generik, yang dinyatakan sebagai berikut.

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

Jenisnya 'a ref adalah sinonim untuk Ref<'a>. Pengkompilasi 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 ref operator.

let ref x = { contents = x }

Tabel berikut ini memperlihatkan fitur yang tersedia di sel referensi.

Operator, anggota, atau bidang Deskripsi Tipe Definisi
ref (operator) Merangkum nilai ke dalam sel referensi baru. 'a -> 'a ref let ref x = { contents = x }
Value (properti) Mendapatkan atau mengatur nilai yang mendasar. unit -> 'a member x.Value = x.contents

Pemrogram C# harus tahu bahwa ref dalam C# bukan hal yang sama seperti ref di F#. Konstruksi yang setara dalam F# adalah byrefs, yang merupakan konsep yang berbeda dari 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 Tipe 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 mengatur nilai yang mendasar. 'a let ref x = { contents = x }

Sebaliknya, penggunaan .Value langsung lebih disukai; lihat F# RFC FS-1111.

Bidang contents ini disediakan untuk kompatibilitas dengan versi ML lainnya dan akan menghasilkan peringatan selama kompilasi. Untuk menonaktifkan peringatan, gunakan --mlcompatibility opsi pengkompilasi. Untuk informasi selengkapnya, lihat Opsi Pengkompilasi.

Lihat juga