ในตัวอย่างต่อไปนี้ ฉันไม่เข้าใจว่าเหตุใดการปิดจึงใช้พารามิเตอร์ s
โดยการอ้างอิง (&s
) จากนั้นจึงยกเลิกการอ้างอิง (*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...");
}
}
ฉันพลาดบางสิ่งบางอย่างที่ชัดเจนไปหรือเปล่า?
||
, การไม่มีreturn
, ความจริงที่ว่าneedle
ไม่ได้ถูกบันทึกอย่างชัดเจน (ดังนั้นจะเป็นอย่างไรไม่ว่าจะบันทึกโดยการอ้างอิงหรือตามค่า), ... - person Matthieu M.   schedule 01.03.2019find(|&s| s == &needle)
ดูดีสำหรับฉัน - person Boiethios   schedule 01.03.2019if haystack.contains(&needle)
เป็นสำนวนมากกว่าสำหรับVec
- person Stargateur   schedule 01.03.2019find()
ใช้การอ้างอิง และผู้วนซ้ำจำนวนมากวนซ้ำการอ้างอิง สิ่งนี้นำไปสู่สถานการณ์ที่อาจเกิดความสับสนโดยที่อาร์กิวเมนต์เป็นการอ้างอิงซ้ำซ้อน คุณสามารถเห็นเอฟเฟกต์นี้ได้ในตัวอย่างด้านล่าง โดยมี&&x
. - person Shepmaster   schedule 01.03.2019