Apa kondisi spesifik untuk penutupan untuk mengimplementasikan sifat Fn
, FnMut
dan FnOnce
?
Itu adalah:
- Kapan closure tidak mengimplementasikan
FnOnce
sifat tersebut? - Kapan closure tidak mengimplementasikan
FnMut
sifat tersebut? - Kapan closure tidak mengimplementasikan
Fn
sifat tersebut?
Misalnya, mutasi status closure pada tubuhnya membuat compiler tidak mengimplementasikannya Fn
.
Jawaban:
Ciri-ciri masing-masing mewakili semakin banyak sifat restriktif tentang closure / fungsi, yang ditunjukkan oleh tanda tangan
call_...
metode mereka , dan khususnya jenisself
:FnOnce
(self
) adalah fungsi yang bisa dipanggil sekaliFnMut
(&mut self
) adalah fungsi yang dapat dipanggil jika memiliki&mut
akses ke lingkungannyaFn
(&self
) adalah fungsi yang bisa dipanggil jika hanya memiliki&
akses ke lingkungannyaSebuah closure
|...| ...
akan secara otomatis mengimplementasikan sebanyak mungkin dari itu.FnOnce
: closure yang tidak bisa dipanggil sekali tidak pantas diberi nama. Perhatikan bahwa jika closure hanya diimplementasikanFnOnce
, ia hanya bisa dipanggil sekali.FnMut
, memungkinkannya dipanggil lebih dari sekali (jika ada akses yang tidak dipisahkan ke objek fungsi).Fn
, memungkinkannya untuk dipanggil di mana saja.Pembatasan ini mengikuti langsung dari jenis
self
dan "desugaring" closure ke dalam struct; dijelaskan dalam posting blog saya Menemukan Penutupan di Rust .Untuk informasi tentang closure, lihat Closures: Anonymous Functions yang Dapat Menangkap Lingkungan Mereka dalam Bahasa Pemrograman Rust .
sumber
FnOnce
, apakah ini berarti ia hanya bisa dipanggil sekali?FnOnce
".