Dalam cuplikan berikut, saya tidak mengerti mengapa penutupan mengambil parameternya s
dengan referensi (&s
), lalu melakukan dereferensi (*s
):
fn main() {
let needle = "list".to_string();
let haystack = [
"some".to_string(),
"long".to_string(),
"list".to_string(),
"of".to_string(),
"strings".to_string(),
].to_vec();
if let Some(str) = haystack.iter().find(|&s| *s == needle) {
println!("{}", needle);
} else {
println!("Nothing there...");
}
}
Apakah saya melewatkan sesuatu yang jelas?
||
, tidak adanyareturn
, fakta bahwaneedle
tidak ditangkap secara eksplisit (jadi bagaimana cara menangkapnya berdasarkan referensi atau nilai), ... - person Matthieu M.   schedule 01.03.2019find(|&s| s == &needle)
terlihat baik-baik saja bagiku - person Boiethios   schedule 01.03.2019if haystack.contains(&needle)
lebih idiomatis untukVec
- person Stargateur   schedule 01.03.2019find()
mengambil referensi, dan banyak iterator yang mengulangi referensi, hal ini mungkin menyebabkan situasi membingungkan di mana argumennya adalah referensi ganda. Anda dapat melihat efek ini pada contoh di bawah, dengan&&x
. - person Shepmaster   schedule 01.03.2019