let numbers = vec![1, 2, 3, 4, 5, 6, 7, 8, 9]; let even_numbers: Vec<i32> = numbers.iter().filter(|&n| n % 2 == 0).map(|n| *n).collect(); let even_numbers: Vec<_> = numbers.iter().filter(|&n| n % 2 == 0).map(|n| n).collect();
I am a newbie with rust. When the type is explicit i have to dereference but if i don’t state the type "the compiler knows and automatically picks the value"? Am i missing something, should not it be the other way around? I can not wrap my head around it. Please a bit explanation.
.iter() produces an iterator with an element type of
To collect into a
Vec<i32>, you have to reference to copy the actual integer from the reference. That’s what
.map(|n| *n) does. (BTW
.copied() exists for this purpose).
Vec<_> tells the compiler "I just want a vector, but infer the element type" so it does just that and picks the element type from the iterator:
You can instead use
.into_iter() on the original
Vec, which will consume the vector and return an iterator of owned (not references) elements (