21.17 Patterns in for
Loops and Function Parameters
Rust extends pattern matching beyond match
:
21.17.1 for
Loops
You can destructure values right in the loop header:
fn main() { let data = vec!["apple", "banana", "cherry"]; for (index, fruit) in data.iter().enumerate() { println!("{}: {}", index, fruit); } }
The (index, fruit)
pattern directly unpacks (usize, &str)
from .enumerate()
.
21.17.2 Function Parameters
Patterns can also appear in function or closure parameters:
fn sum_pair((a, b): (i32, i32)) -> i32 { a + b } fn main() { println!("{}", sum_pair((4, 5))); }
Ignoring unused parameters is trivial:
#![allow(unused)] fn main() { fn do_nothing(_: i32) { // The parameter is ignored } }
Closures work similarly, letting you destructure arguments right in the closure’s parameter list.