Match tuple as input to map
rust
Solution
The key is in the error message:
|
3 | let sums = z.iter().map(|(a, b)| a + b);
| ^^^^^^ expected reference, found tuple
|
It is telling you that `map` accepts its argument by reference, thus you need a reference in the pattern:
fn main() {
let z = vec![(1, 2), (3, 4)];
let sums = z.iter().map(|&(a, b)| a + b);
// ^
println!("{:?}", sums);
}
And that's it.
Problem
An attempt to pattern match a tuple within a map: ``` fn main() { let z = vec![(1, 2), (3, 4)]; let sums = z.iter().map(|(a, b)| a + b); println!("{:?}", sums); } ``` produces the error ``` error[E0308]: mismatched types --> src/main.rs:3:30 | 3 | let sums = z.iter().map(|(a, b)| a + b); | ^^^^^^ expected reference, found tuple | = note: expected type `&({integer}, {integer})` found type `(_, _)` ``` It is possible to use this syntax in some varied form, or must I write: ``` fn main() { let z = vec![(1, 2), (3, 4)]; let sums = z.iter() .map(|pair| { let (a, b) = *pair; a + b }) .collect::<Vec<_>>(); println!("{:?}", sums); } ```