In the code below, why does type inference need help in the case of from_iter and collect, but not for new?
use std::collections::HashMap;
fn main() {
let data = [(1,1),
(2,4),
(3,9)];
let mut new = HashMap::new();
for (k,v) in data {
new.insert(k,v);
}
let from_iter = HashMap::from_iter(data);
let collect = data
.into_iter()
.collect::<HashMap<_, _, _>>();
}
This is an example of what's described in Defaults Affect Inference. The new function is only implemented for S = RandomState, but its FromIterator is implemented for any S hasher.
As for collect(), it's generic in the return type, so that it can collect into any collection. It doesn't only produce a HashMap; you could make a Vec or VecDeque or BTreeMap etc. using collect(). It's just a syntactically more convenient equivalent to FromIterator::from_iter().